
クラスモジュール
Public 売上日 As Variant
Public 商品コード As String
Public 商品名 As String
Public 担当者名 As String
Public 金額 As Long
Public Property Get Self() As sale
Set Self = Me
End Property
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
標準モジュール
Enum 列
売上日 = 1
商品コード = 2
商品名 = 3
担当者名 = 4
金額 = 5
End Enum
Sub 出力②()
Dim TableRange As Range
Dim TableValue As Variant
Dim sh As Worksheet
Set sh = ThisWorkbook.Sheets("Sheet1")
'表のデータを取得する
With ThisWorkbook.Worksheets("Sheet1").Range("A1").CurrentRegion
Set TableRange = .Resize(.Rows.Count - 1).Offset(1)
End With
'表のデータを配列に取得する
TableValue = TableRange.Value
Dim sale As New Collection
Dim i As Long
maxrow = Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To maxrow
With New sale
.売上日 = sh.Cells(i, 列.売上日)
.商品コード = sh.Cells(i, 列.商品コード)
.商品名 = sh.Cells(i, 列.商品名)
.担当者名 = sh.Cells(i, 列.担当者名)
.金額 = sh.Cells(i, 列.金額)
sale.Add .Self
End With
Next
Dim p As sale
For Each p In sale
If p.金額 >= 600000 Then
Debug.Print p.担当者名; p.商品名; p.売上日; p.商品コード
End If
Next
End Sub
このコードを書籍とNETの情報で作成しました。
作動します。
ーーーーーーーーーーーーーーーーーー
If p.金額 >= 600000 Then
Debug.Print p.担当者名; p.商品名; p.売上日; p.商品コード
End If
ーーーーーーーーーーーーーーーーーー
この部分をセルに転記したいのです。
試したこと
Cells(i, 1) = p.商品名(i)
エラー 引数の数が一致しません。
For j = 0 To Ublond(TableValue)
Cells(j + 20, 1) = TableValue(j)
エラー sub または、functionが定義されていません
上記のコードで私の認識では、すでに配列に格納されているとおもうのですが、
どのように転記したらいいのでしょうか?
お手数ですが、ご教示をお願いします。
No.2ベストアンサー
- 回答日時:
変数:TableValue は2次元配列である事とセル範囲に0行や0列がない点で、For j = の最初は1である。
Ublondについては綴りミスで UBound(TableValue, 1)が正解かと。
ちなみに初級レベルなのでクラスモジュールは???ですが、見た感じクラス名を標準モジュール内で宣言されてないようにも思えましたが、私の老眼が原因なのかな?
>Debug.Print p.担当者名; p.商品名; p.売上日; p.商品コード
ここはクラスモジュールでも個々に宣言しているので、
>p.商品名(i)
配列などと同じようにインデックスはないようにも思えますが・・・(自信なし!!!!!!)
>For j = 0 To Ublond(TableValue)
>Cells(j + 20, 1) = TableValue(j)
For j = 1 To UBond(TableValue, 1)
Cells(j + 19, 1) = TableValue(j, 1)
になるのかな?
No.3
- 回答日時:
No.2です。
殆ど被っちゃいましたね。
クラスモジュールを弄ってみたいならVBAよりVBやVC#の方がまだ扱えたと感じますよ。
Excelは独自の機能がありすぎて混乱(不要に感じる?)しましたし。
敢えて言えばユーザーフォームで同じコントロールを複数配置した際の使い分けとかですかね。
No.1
- 回答日時:
こんにちは
>この部分をセルに転記したいのです。
セルから読み込んでいるだけなので、すでにシートに記入されているものと同じですけれど・・・?
ざっと見た限り、エクセルの機能のフィルタをかければ一発ではないでしょうか?
(抽出したいのであれば、その状態でコピペ)
あるいは条件付き書式で、強調表示になるようにしておくとか。(これならマクロ不要)
そもそも、なぜご提示のような回りくどい記述になっているのかが不明です。
クラスと配列の二重で表をコピーしていて、しかも配列の方は使っていないみたいだし・・・
処理内容からすれば、わざわざクラスや配列に取り込む必要も無いようにも思えますが…
(データ数が多くて処理速度を上げるためにメモリ内で処理したいのなら、むしろ配列でまとめて読み書きするなどにしないと意味がありません。)
>Cells(i, 1) = p.商品名(i)
左辺に関しては、変数i の値をどのように制御しているのでしょうか?
右辺に関しては、p.商品名は配列になってはいません。(ご自分で定義しているはず)
>For j = 0 To Ublond(TableValue)
>Cells(j + 20, 1) = TableValue(j)
「Ublond」は(多分)「UBound」の間違え
TableValueは二次元配列になっているはずです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA セル間のリンク修正につい...
-
【マクロ】開いているブックの...
-
Vba セルの4辺について罫線が有...
-
[VB.net] ボタン(Flat)のEnable...
-
VBAでCOPYを繰り返すと、処理が...
-
【マクロ】並び替えの範囲が、...
-
vbsでのwebフォームへの入力制限?
-
算術演算子「¥」の意味について
-
VBA ユーザーフォーム ボタンク...
-
Vba Array関数について教えてく...
-
Excelのマクロについて教えてく...
-
VB.net 文字列から日付型へ変更...
-
Vba 型が一致しません(エラー1...
-
vba textboxへの入力について教...
-
VBAの「To」という語句について
-
以下のプログラムの実行結果は...
-
VBA 入力箇所指定方法
-
【マクロ】シートの変数へ入れ...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
エクセルの改行について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでCOPYを繰り返すと、処理が...
-
複数のExcelファイルをマージす...
-
【ExcelVBA】5万行以上のデー...
-
vbsでのwebフォームへの入力制限?
-
vba textboxへの入力について教...
-
Vba セルの4辺について罫線が有...
-
【マクロ】シートの変数へ入れ...
-
【マクロ】並び替えの範囲が、...
-
Vba Array関数について教えてく...
-
【ExcelVBA】値を変更しながら...
-
【マクロ】開いているブックの...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
エクセルのマクロについて教え...
-
エクセルの改行について
-
VBA 入力箇所指定方法
-
[VB.net] ボタン(Flat)のEnable...
-
VBAでセルの書式を変えずに文字...
-
vb.net(vs2022)のtextboxのデザ...
-
Excelのマクロについて教えてく...
-
改行文字「vbCrLf」とは
おすすめ情報