配列を作成し、配列に「サプライヤ名」または「null」(実際の文字列null)満たされている。特定の条件が満たされない場合、配列はデータでいっぱいにならず、したがって空です(または私は信じています)。VBA - 配列が空でないときにif文を実行するのは、配列が空の場合でも実行されます。
私がしたいのは、その配列に記載されているサプライヤーの名前だけを印刷することです。したがって、配列内の項目に値 "null"がなく、配列が空でない場合にのみ入力されるIf
ステートメントを作成する必要があります。
以下のコードでは、次の問題が発生しています。文字列配列supplierCategoryP(r)
は条件を満たさなかったため、情報が一切入力されませんでした。だから私はこれが空の配列だと仮定します。
If supplierCategoryP(r) <> "null" And Not IsEmpty(supplierCategoryP(r)) Then
を...それはいけない一方で、配列が空であるため、私はデバッグするときしかし、コードはこの最初のIf
がまだ入力されていることを示しています。配列を作成します
k = 1
If countNoNull > 0 Then
moveDownBy = countNoNull
For r = 1 To nP
If supplierCategoryP(r) <> "null" And Not IsEmpty(supplierCategoryP(r)) Then
Cells(9 + k + moveDownBy, 5) = supplierCategoryP(r)
k = k + 1
countNoNull = countNoNull + 1
End If
Next r
Else
For r = 1 To nP
If supplierCategoryP(r) <> "null" And Not IsEmpty(supplierCategoryP(r)) Then
Cells(9 + k, 5) = supplierCategoryP(r)
k = k + 1
countNoNull = countNoNull + 1
End If
Next r
End If
コード:IsEmpty
関数はnull文字列では動作しないこと
Worksheets("PEMCO").Activate
comNO = CLng(Range("commoditiesAmount").Text)
nP = CLng(Range("supplierAmount").Text)
ReDim supplierCategoryP(1 To nP) As String
For c = 1 To comNO
commodityLoop = Cells(3, 1 + c)
If commodity = commodityLoop Then
For r = 1 To nP
cellX = Cells(3 + r, 1 + c)
If cellX = "x" Then
supplierCategoryP(r) = Cells(3 + r, 1)
Else
supplierCategoryP(r) = "null"
End If
Next r
End If
Next c
文字列配列ですか? [このSOスレッド](http://stackoverflow.com/a/206526/4650297)から、 'If Len(Join(yourArrayList))> 0 Then''を試すことができます。 – BruceWayne
そのための組み込み関数はないと思います。配列を反復し、 '' null ''の意味を確認する関数を作成する必要があります – litelite
Array *要素*(配列ではない)が空であるかどうかをチェックするには、' Not IsEmpty(supplierCategoryCS (r)) 'となる。 [IsEmpty](https://msdn.microsoft.com/en-us/library/office/gg264227.aspx)を参照してください。 – trincot