0

ワークブックのいくつかのスプレッドシートから、列 G のセルの内容に基づいて、セル A2 から A88 および C2 から C88 の内容を概要シートにコピーする必要があります。

そのため、すべてのスプレッドシートをスキャンして、Case closed という単語がセル G33 にあるかどうかを確認し、セル A33 と C33 の内容を概要ページのセルにコピーするコードが必要です。

私はいくつかの近い答えを見てきましたが、仕事をするものは何もありません。

コードがありません。

すべての回答に感謝します。

4

1 に答える 1

0

Excelの数式を使用してこれを解決できない場合は、いくつかのvbaを作成できます...次のvbaコードを使用して小さなテストExcelシートを作成しました。

Sub test()
    processSheet Application.ActiveWorkbook, "Sheet1"
End Sub

Function FindSheet(currentWorkbook As Workbook, sheetName As String) As Worksheet
    If currentWorkbook Is Nothing Then
        Err.Raise vbObjectError + 1, "FindSheet", "Supplied workbook is nothing"
    End If
    Dim idx As Integer
    For idx = 1 To currentWorkbook.Sheets.Count
        Dim checkSheet As Worksheet
        Set checkSheet = currentWorkbook.Sheets.Item(idx)
        If checkSheet.Name = sheetName Then
            Set FindSheet = checkSheet
            Exit Function
        End If
    Next
End Function

Function IsEmpty(currentCell As Range) As Boolean
    IsEmpty = False
    If currentCell.Value = "" And currentCell.Value2 = "" Then
        IsEmpty = True
    End If
End Function

Sub processSheet(currentWorkbook As Workbook, sheetName As String)
    On Error GoTo Catch
    Dim currentSheet As Worksheet
    Set currentSheet = FindSheet(currentWorkbook, sheetName)
    If currentSheet Is Nothing Then
        Err.Raise vbObjectError + 2, "ProcessSheet", "Could not find sheet " + sheetName
    End If
    Dim colA As Range
    Dim colB As Range
    Dim colCondition As Range
    Dim colResult As Range

    currentSheet.Activate

    Set colA = currentSheet.Columns(1)
    Set colB = currentSheet.Columns(2)
    Set colCondition = currentSheet.Columns(3)
    Set colResult = currentSheet.Columns(4)

    Dim index As Integer: index = 2
    Dim run As Boolean: run = True

    Do While run
        If IsEmpty(colA.Rows(index)) And IsEmpty(colB.Rows(index)) And IsEmpty(colCondition.Rows(index)) Then
            run = False
        Else
            index = index + 1
            If colCondition.Rows(index).Value = "Closed" Then
                resultContent = CStr(colA.Rows(index).Value2) + ": " + CStr(colB.Rows(index).Value2)
            Else
                resultContent = "-"
            End If
            colResult.Rows(index).Value2 = resultContent
        End If
    Loop
    GoTo Finally

Catch:
        MsgBox ("An error occured: " + Err.Description)
        Exit Sub
Finally:

    End Sub

このマクロを新しいブックのマクロに入れることができます。Sheet1を開き、4つの列を追加します。Excelシートがどのように見えるかのスクリーンショットを追加しました。

新規ユーザーとして、画像を投稿することは許可されていません。リンクは次のとおりです。Sheet1

コードの簡単な説明。

  • ブックが渡され、シート名でシートが選択されます
  • シートが使用可能な場合、スクリプトは3つの従属列(連結に2つの列、条件に1つの列)を実行し、値が設定されているかどうかを確認します。3つの列すべてに値が含まれていない場合、ループは停止します(この場合、開始インデックスと終了インデックスが常に同じである場合は、ハードコーディングできます)。
  • 反復中に、条件フィールドがチェックされます。「Closed」と等しい場合、結果のセルには、連結された最初の2つの列の値が入力されます。

あなたは確かにあなたの問題にコードを適応させる必要がありますが、それは大きなことではありません。

于 2012-07-11T10:47:07.837 に答える