Зацикливание в парах электронных таблиц в VBA

#excel #vba #loops #spreadsheet

Вопрос:

У меня есть 10 различных электронных таблиц(a,b,c,d,e,f и т.д.) В одном документе Excel. Как я могу создать цикл для сравнения определенных пар электронных таблиц (a против d, b против e, c против f и т. Д.)?

 Dim x As Integer Dim y As Integer Dim year1, year2 As Integer Dim strname1, strname2, strname3, strname4 As String Dim st Dim p strname1 = "Female" strname2 = "Male" strname3 = "Other" strname4 = "Unknown" year1 = 2019 year2 = 2020 For Each p In Array(2019, 2020) For Each st In Array(strname1, strname2, strname3, strname4)  Worksheets("a").Activate  x = WorksheetFunction.SumIfs(Range("F9:F250"), Range("C9:C250"), p, Range("E9:E250"), st)  Worksheets("d").Activate  y = WorksheetFunction.SumIfs(Range("F7:F30"), Range("C7:C30"), p, Range("D7:D30"), st)  If x = y Then  MsgBox "Number of people correctly validated for" amp; " " amp; p amp; " " amp; st Else  MsgBox "Error in validation for" amp; " " amp; p amp; " " amp; st End If  Next st Next p  

Комментарии:

1. Что вы имеете в виду под «Конкретными парами электронных таблиц»? Есть ли у вас эти пары, которые вы хотите сравнить, определенные где-то (возможно, массив 2-dim или даже другой лист)? Где бы вы ни хранили эти пары (помимо вашего мозга), это то, что вы хотите повторить. Нравится.. For Each pairRow in Sheets("myPairs").Range("A1:B10").Rows (в качестве примера).

2. Спасибо за ответ. У меня действительно определены эти пары. Например, я хочу сравнить a с d, b с e, c с f и h с g. Из электронных таблиц a, b,c и h я должен выбрать одинаковые диапазоны ячеек,а из d,e,f и g-одинаковые диапазоны ячеек.

3. Ваше использование слова «электронные таблицы» сбивает с толку. Похоже, вместо этого вы имеете в виду РАБОЧИЕ ЛИСТЫ.

4. Извините за любую путаницу. Я имею в виду РАБОЧИЕ ЛИСТЫ

Ответ №1:

На новом листе в той же книге (давайте назовем его myPairs ) в столбцах A и B введите свои пары, такие как:

  --- ---  | A | B |  --- ---  | a | e | | b | f | | c | g | | d | h |  --- ---   

Теперь вы можете ввести цикл в свой код:

 Dim x As Integer Dim y As Integer Dim year1, year2 As Integer Dim strname1, strname2, strname3, strname4 As String Dim st Dim p strname1 = "Female" strname2 = "Male" strname3 = "Other" strname4 = "Unknown" year1 = 2019 year2 = 2020 For each pairRow in Sheets("myPairs").Range("A1:B4").Rows  firstSheetName = pairRow.Cells(1,1)  secondSheetName = pairRow.Cells(1,2)  For Each p In Array(2019, 2020)  For Each st In Array(strname1, strname2, strname3, strname4)  Worksheets(firstSheetName).Activate  x = WorksheetFunction.SumIfs(Range("F9:F250"), Range("C9:C250"), p, Range("E9:E250"), st)  Worksheets(secondSheetName).Activate  y = WorksheetFunction.SumIfs(Range("F7:F30"), Range("C7:C30"), p, Range("D7:D30"), st)  If x = y Then  MsgBox "Number of people correctly validated for" amp; " " amp; p amp; " " amp; st  Else  MsgBox "Error in validation for" amp; " " amp; p amp; " " amp; st  End If   Next st  Next p  

Комментарии:

1. Спасибо за решение. Теперь все в порядке