2

範囲の値をまたはと比較しているときに、タイプの不一致エラーが発生し""ますvbNullString。私はこの問題を扱っている多くの同様のq+aの投稿を読みました。

データはすべて数字または""です。

Sub vegetableCounting()
Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet
Dim ws1Range As Excel.range, ws2Range As Excel.range, ws3Range As Excel.range, ws2Loop As Excel.range
Dim ws1Row As Long, ws1Col As Long, ws2Row As Long, ws2Col As Long
'
Dim rowCounter As Long, colCounter As Long, rowsMendo As Long
Dim mendoSum As Double
'
Set ws1 = Sheets("shareSchedule")
Set ws2 = Sheets("shareDistribution")
Set ws3 = Sheets("vegCount")
'***not yet set to the full ranges***
Set ws1Range = ws1.range("E7:H11") 'shareSchedule
Set ws2Range = ws2.range("D7:BB17") 'shareDistribution
Set ws3Range = ws3.range("D7:BB11") 'vegetableCount
'***not yet set to the full ranges***
rowsMendo = 0
rowCounter = 0
colCounter = 0
mendoSum = 0

For ws1Row = 0 To ws1Range.Rows.count Step 1
    For ws1Col = 0 To ws1Range.Columns.count Step 1
        If ws1Range.Offset(ws1Row, ws1Col).value <> "" Then
            For Each ws2Loop In ws2Range '11rows*51cols = 561
                ws2Row = ws2Row + rowCounter + rowsMendo
                ws2Col = ws2Col + colCounter
                If ws2Range.Offset(ws2Row, ws2Col).value = "" Then
                    Exit For
                Else
                    If ws1Range.Offset(ws1Row, ws1Col).Interior.ColorIndex = 24 And _
                    ws2Range.Offset(ws2Row, ws2Col).Interior.ColorIndex = 24 Then 'a MENDO match
                        If rowCounter < 3 Then
                            mendoSum = mendoSum + ws1Range.Offset(ws1Row, ws1Col).value * ws2Range.Offset(ws2Col, ws2Row)
                            rowCounter = rowCounter + 1
                        ElseIf rowCounter = 3 Then
                            colCounter = colCounter + 1
                            rowCounter = 0
                        ElseIf colCounter = ws2Range.Columns.count + 1 And _
                        ws2Range.Offset(ws2Row, 1).Interior.ColorIndex = 24 And _
                        ws2Range.Offset(ws2Row + 4, 1).Interior.ColorIndex = 24 Then
                            colCounter = 0
                            rowsMendo = rowsMendo + 3
                        ElseIf colCounter = ws2Range.Columns.count + 1 And _
                        ws2Range.Offset(ws2Row, 1).Interior.ColorIndex = xlNone And _
                        ws2Range.Offset(ws2Row + 4, 1).Interior.ColorIndex = xlNone Then
                            colCounter = 0
                            rowsMendo = rowsMendo + 1
                        End If

                        ws3Range.Offset(ws1Row, ws2Col) = ws1Range.Offset(ws1Row, ws1Col).value * ws2Range.Offset(ws2Row, ws2Col).value

                    End If
                End If
            Next
        End If
    Next ws1Col
Next ws1Row

'for ws2
                'Offset(0, 0), Offset(1, 0), Offset(2, 0), then
                'Offset(0, 1), Offset(1, 1), Offset(2, 1), then
                'Offset(0, 2), Offset(1, 2), Offset(2, 2), then
                'etc
End Sub

エラーが発生します

  If ws1Range.Offset(ws1Row, ws1Col).value <> "" Then

そして、病気の可能性が再びそれを取得します

If ws2Range.Offset(ws2Row, ws2Col).value = "" Then

何かご意見は?これが、プルしようとしているワークシートの画像です。

4

3 に答える 3

0

範囲のオフセットを見ると、オフセット値によってオフセットされた範囲全体が得られます。

例えば

set a=sheets(1).range("A1:F40")
debug.print a.offset(1,1).address

の結果を与える

$B$2:$G$41

これは (A+1,1+1:F+1,40+1) であり、単一のセルではないことに注意してください

2 つのオプションがあります。

  1. 範囲を単一のセルに設定し、オフセットを使用してそのセルの周囲を調べます
  2. あなたが今持っている範囲を使用cells(x,y)し、その範囲で見るために使用します
于 2012-11-05T16:28:29.900 に答える
0

オフセット機能は普段あまり使いませんが、配列のように行と列を直接指定することで、指定した範囲のセルにアクセスできます。

例: ws2Range(ws2Row, ws2Col).value

ただし、反復では 1 から開始する必要があります。0 から開始するとエラーが発生します。

于 2012-11-05T08:34:57.640 に答える