
前回アップした画像のレイアウトで無事転記できました。みなさん ありがとうございます。
しかし画像のレイアウトは私のスキル不足を補うため、ご教示いただく内容を理解するため単純化しています。勉強のため実際のレイアウトにあてはめコードを書き換えてみたところ、
やはり正常には転記できませんでした。エラーは出ないのですがカウントした値を目視で確認したところ、相違していました。
単純化するため、マクロ実行前に省いていた抽出条件が2点あり、これが原因でしょうか。
_マクロ実行前に抽出した条件として①状況シートB列の月「12月」で抽出、②状況シートS列の条件1「あ」で抽出、この2点を手動で抽出後、下記マクロを実行しました。
この条件で修正箇所がどこなのか教えていただけませんでしょうか。お願いいたします。
Public Sub 年齢別カウント_横()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim maxrow1 As Long 'B列最終行
Dim row1 As Long
Dim row2 As Long
Dim col2 As Long
Dim rgs As String
Dim rgs1 As String
Dim rgs2 As String
Dim idx As Long
Dim bun As String
Set sh1 = Worksheets("状況")
Set sh2 = Worksheets("B表")
sh2.Range("G15:M18").ClearContents 'B表の値をクリア
maxrow1 = sh1.Cells(Rows.Count, "B").End(xlUp).Row '状況B列最終行
For row1 = 3 To maxrow1 '状況3行目~最終行まで
bun = sh1.Cells(row1, "U").Value '状況シートのC列分類1を選択
idx = GetBunrui(bun) '分類を取得
If idx < 0 Then
MsgBox ("分類1不正")
sh1.Select
sh1.Cells(row1, "U").Select '状況の分類列U
Exit Sub
End If
row2 = idx + 15 'B表 分類1毎の行番号
idx = GetAge(sh1.Cells(row1, "K").Value) '状況の年齢列K
col2 = idx + 8 'B表 年齢毎の列番号
sh2.Cells(row2, col2).Value = sh2.Cells(row2, col2).Value + 1
Next
For row2 = 15 To 25 'B表の分類C列の最初の行から最後の行 15To25
rgs = "H" & row2 & ":M" & row2 'B表の最初の年齢列H、最後の年齢列M
sh2.Cells(row2, "G").Formula = "=sum(" & rgs & ")" 'B表の計列G
Next
MsgBox ("完了")
End Sub
Private Function GetBunrui(ByVal bun As String) As Long
Dim buns As Variant
Dim i As Long
buns = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", " K")
For i = 0 To UBound(buns)
If bun = buns(i) Then
GetBunrui = i
Exit Function
End If
Next
GetBunrui = -1
End Function
Private Function GetAge(ByVal vage As Variant) As Long
Dim vals As Variant
Dim i As Long
Dim age As Long
vals = Array(15, 20, 25, 30, 35, 40)
GetAge = UBound(vals)
If IsNumeric(vage) = False Then Exit Function
age = Int(vage)
If age < vals(0) Or age >= vals(UBound(vals)) Then Exit Function
For i = 0 To UBound(vals) - 1
If age >= vals(i) And age < vals(i + 1) Then
GetAge = i
Exit Function
End If
Next
End Function

No.4
- 回答日時:
・4.B表の分類2はC列に定義され、15~25行までを(A~K)で使用し分類2はこれ以上増えません。
これって事前に記載しておき且つDictionaryオブジェクトを用いれば、コード全体も半分で済むようにも感じますが、それだと理解が厳しいのでしょうか?
でもDictionaryオブジェクト自体をご存じなければ、それもまた理解が厳しいかもですから、専属のベテラン回答者様にお任せが良いですかね。
初心者ゆえかコードを把握するのは私も厳しいです。
元々どれだけ短くかけるか?で過去の回答者様にしごかれましたので、逆に長く書く方が辛いかな。
No.3
- 回答日時:
お示し頂いたコード '年齢を取得の"E"を"K"に変更し、目視と同じ転記ができました。何故かB表G列の計は空欄のままです....
↓こんなことができるのですね!
If sh1.Rows(row1).Hidden = True Then GoTo NEXT99
大変勉強になり助かりました。以前はオートフィルターを複数回重ねたコードで運用していましたが、今回の縦と横の項目を
Private Function GetBunruiとPrivate Function GetAgeに分け
Public Subに組み込む手法は、とても汎用性がありいろいろな場面で応用できるように感じました。
ド素人の私にここまでお付き合いいただきありがとうございます。
No.2
- 回答日時:
前回回答者です。
前回のマクロは、そもそも、フィルターがかかっていない状態での処理す。
フィルターがかかった状態では、処理の方法が異なってきます。
質問時には、予め、フィルターがかかった状態であることを明記されると良いでしょう。
以下、確認点です。
1.状況シートのデータの開始行は何行からになりますか。
表示されている状態では216行ですが、非表示も含めた開始行です。
3行目からでしょうか。
2.状況シートの年齢はK列から取得であってますか。
3.状況シートの分類2はU列から取得であってますか。
前回は分類1でしたが、分類2が正しいということであってますか。
4.B表の分類2はC列に定義されていて15行~25行までを使用する。(A~K)この前提で良いでしょうか。
C15=A、・・・・C25=K
(分類2はこれ以上は増えない前提です)
5.B表のG列の計は、H列~M列の計を算出する。
従って、マクロで設定する範囲は、G15:M25 の範囲となりますが、間違いないでしょうか。
(縦の合計は算出しません。H15~H25の合計の算出などは行いません)
No.1
- 回答日時:
抽出って事は『表示されている行・非表示の行』の判定が必要なのですが、それよりまず画像とコードの関係が繋がらない気がします。
何をどう努力してみたのかを出してみないと利用規約違反(作成依頼)になってしまいますよ。
調べる際には『可視セル』についてですかね。
https://vba-create.jp/vba-method-specialcells-vi …
この可視セル範囲についてだけ実行させないと、見えないセルのデータも利用してしまいます。
多分違いとしてはその値数じゃないでしょうか?
もしそうだとしたら上記が当てはまりますし、抽出条件が変動するのならコード内には書けませんよね?
あとB表のC列の項目は事前に入っているのですかね?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたい 6 2023/01/23 12:00
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで、あるセルの値に応じて...
-
IIF関数の使い方
-
B列の最終行までA列をオート...
-
Worksheets メソッドは失敗しま...
-
vba 2つの条件が一致したら...
-
【VBA】2つのシートの値を比較...
-
DataGridViewに空白がある場合...
-
データグリッドビューの一番最...
-
Cellsのかっこの中はどっちが行...
-
エラーコード1004
-
VBAでのリスト不一致抽出について
-
VBAを使って検索したセルをコピ...
-
【Excel VBA】特定列相違により...
-
rowsとcolsの意味
-
VBAで、離れた複数の列に対して...
-
VBA 何かしら文字が入っていたら
-
VBAのFind関数で結合セルを検索...
-
複数csvを横に追加していくマク...
-
実力がなくマクロがわかりません。
-
複数条件でのカウント
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで、あるセルの値に応じて...
-
vba 2つの条件が一致したら...
-
Worksheets メソッドは失敗しま...
-
B列の最終行までA列をオート...
-
Cellsのかっこの中はどっちが行...
-
IIF関数の使い方
-
Changeイベントでの複数セルの...
-
【VBA】2つのシートの値を比較...
-
VBA 何かしら文字が入っていたら
-
URLのリンク切れをマクロを使っ...
-
VBAのFind関数で結合セルを検索...
-
DataGridViewに空白がある場合...
-
VBAを使って検索したセルをコピ...
-
文字列の結合を空白行まで実行
-
データグリッドビューの一番最...
-
VBAでのリスト不一致抽出について
-
エクセル 2つの表の並べ替え
-
rowsとcolsの意味
-
【Excel VBA】 B列に特定の文字...
-
VBA 列が空白なら別のマクロへ...
おすすめ情報
ご確認いただいた内容のお返事になります。
1.状況シートの開始行は「3」行目からになります。
2.状況シートの年齢は「K」列から取得になります。
3.状況シートの分類2は「U」列から取得になり、分類1ではなく、「分類2」になります。
4.B表の分類2はC列に定義され、15~25行までを(A~K)で使用し分類2はこれ以上増えません。
5.B表のG列の計は、H列~M列の計を算出します。マクロで設定する範囲は、G15:M25で間違いありません。
縦の合計H15~H25合計の算出は、続いて別の項目が入りますのでこの段階で必要ありません。
ご質問頂いた回答になります。
1.状況シートの開始行は「3」行目からになります。
2.状況シートの年齢は「K」列から取得になります。
3.状況シートの分類2は「U」列から取得になり、分類1ではなく、「分類2」になります。
4.B表の分類2はC列に定義され、15~25行までを(A~K)で使用し分類2はこれ以上増えません。
5.B表のG列の計は、H列~M列の計を算出します。マクロで設定する範囲は、G15:M25で間違いありません。
縦の合計H15~H25合計の算出は、続いて別の項目が入りますのでこの段階で必要ありません。