#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. Спасибо за решение. Теперь все в порядке