从公式中提取数组值以在更改后的公式中重复使用

时间:2020-03-05 15:44:18

标签: excel vba excel-formula

再次需要您的帮助

我有一个月的计数值填充了一系列数据。然后,我对范围AK进行降序排序并获得10个第一个值。

For i = LBound(Brand) To UBound(Brand)
        Range("AF" & i + 2).Formula = "=COUNTIFS(C:C," & RTrim(Month(Mesyaz3)) & _
                   ",H:H,""Headphones"",F:F," & Chr(34) & Brand(i) & Chr(34) & ")"
  Next i

接下来,我将范围复制到AL和AM,并希望仅对第一品牌应用countifs公式,但其他值相同。完全堆叠。只是

Range("AL2:AL8").Formula = "=COUNTIFS(C:C," & RTrim(Month(Mesyaz2)) & _
    ",H:H,""Headphones"",F:F," & Chr(34) & Brand(i) & Chr(34) & ")"

由于某种原因不起作用。有什么办法可以通过数组或替代方法?还是应该从公式中提取字符串?

1 个答案:

答案 0 :(得分:0)

解决方案非常简单。希望能帮助到某人。

## Importation des Modules ##
from tkinter import *

## Création de la fenêtre / creating the sheet ##
def main():
    fen = Tk()
    fen.title('Game')
    texte=Label(fen, text="Go ahead Mr Joestar")
    texte.grid(row=0, column=0)
    pos=Label(fen, text='(Nope;Nope)')
    pos.grid(row=0, column=1)

##Canvas##
    dessin=Canvas(fen, bg="white", width=301, height=301) #canvas
    dessin.grid(row = 1, column = 0, padx=2, pady=2, columnspan=2) #Position Canvas

    dessin.create_line(99, 0, 99, 301, width=1, fill='black')
    dessin.create_line(201, 0, 201, 301, width=1, fill='black')
    dessin.create_line(0, 99, 301, 99, width=1, fill='black')
    dessin.create_line(0, 201, 301, 201, width=1, fill='black')
##buttons##
    bouton_quitter = Button(fen, text='Quitter', command=fen.destroy) #Quitter
    bouton_quitter.grid(row=2, column=0)

    bouton_restart = Button(fen, text='Recommencer', command=restart(fen)) #Restart
    bouton_restart.grid(row=2, column=1)
##binds##
    dessin.bind("<Motion>", Position) #event motion mouse
    dessin.bind("<Button-1>", cases) #event mouse 1

##Liste / list ###
list=[[0,0,0],[0,0,0],[0,0,0]]
print(list)
##Variables##
Joueur=1 #Joueur1 (nommé Joestar) = 1 ; Joueur2 (nommé DArbi) = -1 / player1=1 ; player2=-1
V1=0#condition victoire j1 / Winning condition for player 1
V2=0#condition victoire j2 / Winning condition for player 2
IDC=0 #identifier la case / for identifying which cell
turns=0#nombre de tours

##Function position##
def Position(event):
    pos.configure(text='('+str(event.x)+'.'+str(event.y)+')')

##Fuction win##
def win(list, V1, V2): #pour voir qui a gagné / to see who won
    if list[0][0]+list[0][1]+list[0][2]==3: #Vérification lignes
        V1=1
    elif list[0][0]+list[0][1]+list[0][2]==-3:
        V2=1
    if list[1][0]+list[1][1]+list[1][2]==3:
        V1=1
    elif list[1][0]+list[1][1]+list[1][2]==-3:
        V2=1
    if list[2][0]+list[2][1]+list[2][2]==3:
        V1=1
    elif list[2][0]+list[2][1]+list[2][2]==-3:
        V2=1
    if list[0][0]+list[1][0]+list[2][0]==3: #Vérification colones
        V1=1
    elif list[0][0]+list[1][0]+list[2][0]==-3:
        V2=1
    if list[0][1]+list[1][1]+list[2][1]==3:
        V1=1
    elif list[0][1]+list[1][1]+list[2][1]==-3:
        V2=1
    if list[0][0]+list[1][1]+list[2][2]==3:#Diagonales
        V1=1
    elif list[0][0]+list[1][1]+list[2][2]==-3:
        V2=1
    if list[0][2]+list[1][1]+list[2][0]==3:
        V1=1
    elif list[0][2]+list[1][1]+list[2][0]==-3:
        V2=1
    if V1==1 and V2==0:
        texte.configure(text='Joestar win !')
    elif V1==0 and V2==1:
        texte.configure(text='DArbi win')
    elif turns==9 and V1==0 and V2==0 or V1==1 and V2==1:
        texte.configure(text='No one won...')

##Function remplir##
def remplir(list,IDC):#pour remplir les cases
    global Joueur #to edit Joueur for all the program
    if IDC ==1:#Cell 1
        if list[0][0]==0:
            list[0][0]=Joueur
            if list[0][0]==1:
                dessin.create_line(10,10,90,90, width=1) #cell 1 cross
                dessin.create_line(10, 90, 90, 10, width=1)
            elif list[0][0]==-1:
                dessin.create_oval(10, 10, 90, 90, width=1)#cell 1 circle
            Joueur=(-Joueur)#nextplayer
        elif list[0][0]!=0:
            print("case déjà prise")
    if IDC ==2:#Cell 2
        if list[0][1]==0:
            list[0][1]=Joueur
            if list[0][1]==1:
                dessin.create_line(110,10,190,90, width=1)
                dessin.create_line(110,90,190,10, width=1)
            elif list[0][1]==-1:
                dessin.create_oval(110, 10, 190, 90, width=1)
            Joueur=(-Joueur)
        elif list[0][1]!=0:
            print("case déjà prise")
    if IDC ==3:#Cell 3
        if list[0][2]==0:
            list[0][2]=Joueur
            if list[0][2]==1:
                dessin.create_line(210,10,290,90, width=1)
                dessin.create_line(210,90,290,10, width=1)
            elif list[0][2]==-1:
                dessin.create_oval(210, 10, 290, 90, width=1)
            Joueur=(-Joueur)
        elif list[0][2]!=0:
            print("case déjà prise")
    if IDC ==4: #Cell 4
        if list[1][0]==0:
            list[1][0]=Joueur
            if list[1][0]==1:
                dessin.create_line(10,110,90,190, width=1)
                dessin.create_line(10, 190, 90, 110, width=1)
            elif list[1][0]==-1:
                dessin.create_oval(10, 110, 90, 190, width=1)
            Joueur=(-Joueur)
        elif list[1][0]!=0:
            print("case déjà prise")
    if IDC ==5:#Cell 5
        if list[1][1]==0:
            list[1][1]=Joueur
            if list[1][1]==1:
                dessin.create_line(110,110,190,190, width=1)
                dessin.create_line(110,190,190,110, width=1)
            elif list[1][1]==-1:
                dessin.create_oval(110, 110, 190, 190, width=1)
            Joueur=(-Joueur)
        elif list[1][1]!=0:
            print("case déjà prise")
    if IDC ==6:#Cell 6
        if list[1][2]==0:
            list[1][2]=Joueur
            if list[1][2]==1:
                dessin.create_line(210,110,290,190, width=1)
                dessin.create_line(210,190,290,110, width=1)
            elif list[1][2]==-1:
                dessin.create_oval(210, 110, 290, 190, width=1)
            Joueur=(-Joueur)
        elif list[1][2]!=0:
            print("case déjà prise")
    if IDC ==7: #Cell 7
        if list[2][0]==0:
            list[2][0]=Joueur
            if list[2][0]==1:
                dessin.create_line(10,210,90,290, width=1)
                dessin.create_line(10, 290, 90, 210, width=1)
            elif list[2][0]==-1:
                dessin.create_oval(10, 210, 90, 290, width=1)
            Joueur=(-Joueur)
        elif list[2][0]!=0:
            print("case déjà prise")
    if IDC ==8:#Cell 8
        if list[2][1]==0:
            list[2][1]=Joueur
            if list[2][1]==1:
                dessin.create_line(110,210,190,290, width=1)
                dessin.create_line(110,290,190,210, width=1)
            elif list[2][1]==-1:
                dessin.create_oval(110, 210, 190, 290, width=1)
            Joueur=(-Joueur)
        elif list[2][1]!=0:
            print("case déjà prise")
    if IDC ==9:#Cell 9
        if list[2][2]==0:
            list[2][2]=Joueur
            if list[2][2]==1:
                dessin.create_line(210,210,290,290, width=1)
                dessin.create_line(210,290,290,210, width=1)
            elif list[2][2]==-1:
                dessin.create_oval(210, 210, 290, 290, width=1)
            Joueur=(-Joueur)
        elif list[2][2]!=0:
            print("case déjà prise")

##Fuction cases##
def cases(event):
    if int(event.x)>2 and int(event.x)<100 and int(event.y)>0 and int(event.y)<100: #CASE A1
        print('A1')
        IDC=1
        remplir(list,IDC)
        win(list, V1, V2)
    elif int(event.x)>102 and int(event.x)<200 and int(event.y)>0 and int(event.y)<100: #CASE A2
        print('A2')
        IDC=2
        remplir(list,IDC)
        win(list, V1, V2)
    elif int(event.x)>202 and int(event.x)<300 and int(event.y)>0 and int(event.y)<100: #CASE A3
        print('A3')
        IDC=3
        remplir(list,IDC)
        win(list, V1, V2)
    elif int(event.x)>2 and int(event.x)<100 and int(event.y)>100 and int(event.y)<200: #CASE B1
        print('B1')
        IDC=4
        remplir(list,IDC)
        win(list, V1, V2)
    elif int(event.x)>100 and int(event.x)<200 and int(event.y)>102 and int(event.y)<200: #CASE B2
        print('B2')
        IDC=5
        remplir(list,IDC)
        win(list, V1, V2)
    elif int(event.x)>202 and int(event.x)<300 and int(event.y)>102 and int(event.y)<200: #CASE B3
        print('B3')
        IDC=6
        remplir(list,IDC)
        win(list, V1, V2)
    elif int(event.x)>2 and int(event.x)<100 and int(event.y)>202 and int(event.y)<300: #CASE C1
        print('C1')
        IDC=7
        remplir(list,IDC)
        win(list, V1, V2)
    elif int(event.x)>100 and int(event.x)<200 and int(event.y)>202 and int(event.y)<300: #CASE C2
        print('C2')
        IDC=8
        remplir(list,IDC)
        win(list, V1, V2)
    elif int(event.x)>202 and int(event.x)<300 and int(event.y)>202 and int(event.y)<300: #CASE C3
        print('C3')
        IDC=9
        remplir(list,IDC)
        win(list, V1, V2)
    else:
        print('no')

##Fuctions:others##
def restart(fen):
    fen.destroy()
    main()


##Mainloop##
main()