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つの列の値が入力されます。
あなたは確かにあなたの問題にコードを適応させる必要がありますが、それは大きなことではありません。