- ベストアンサー
エクセルマクロを使って、表を完成させたいのですが
お尋ねします。 ブックAのシート1には、下記のように数字が入っています。 それをもとに、ブックBのシート1に表を完成させたいのですが、どのようにすればいいでしょうか。 ブックBは、ブックAのA列の値がそれぞれいくつあるかを示したものです。 ブックA A列 1行 2A 2行 1A 3行 1C 4行 4D 5行 5D 6行 1A ※行数はこれ以上ありますが、A列には、数字とアルファベットの 組み合わせで2桁で構成されています。 ※アルファベットはA~Dで、数字は1~5です。 ブックB A列 B列 C列 D列 F列 1行 2 1 2行 1 3行 4行 1 5行 1 ※ブックAのA列の値からブックBにブックAの値が それぞれ何個あるかを示したいのです。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
A列でソート 例データ 1A 1A 1C 2A 2C 3C 4D 4D 5D ーーー 全角文字で、1やAが入っているという前提で A-Zまでしかないという前提で (半角だともっとやりやすいが) 同一シートのD列以右に結果計数を出した。 ソート法はコードが他に比べ、簡単になるはず。 ーー Sub test02() d = Range("a65536").End(xlUp).Row 'MsgBox d m = Cells(2, "A") ct = 0 For i = 2 To d If Cells(i, "A") = m Then ct = ct + 1 Else '--計数セット r = Asc(Left(m, 1)) + 32177 c = Asc(Right(m, 1)) + 32161 Cells(r + 1, c + 3) = ct '-- ct = 0 ct = ct + 1 m = Cells(i, "A") End If Next i End Sub ーーー 結果 C2:G10 A B C D 1 2 - 1 - 2 1 - 1 - 3 - - 1 - 4 - - - 2 5 - - - -
その他の回答 (3)
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
回答番号:No.2です >※アルファベットはA~Dで、数字は1~5です。 見逃してました。っていうかF列って何? > A列 B列 C列 D列 F列 × With Worksheets("Sheet2").Range("A1:E5") ○ With Worksheets("Sheet2").Range("A1:D5") 数式は × CHAR(9008+{1;2;3;4;5})&CHAR(9024+{1,2,3,4,5})) ○ CHAR(9008+{1;2;3;4;5})&CHAR(9024+{1,2,3,4}) さらに、当方の回答の Sheet1 → ブックA Sheet2が ブックB にあたります ブック間までは考えてませんでした。 # imogasiさん 最後の「5D」がカウントされていませんよ
補足
度々ありがとうございます。 もう少し頑張ってみます!
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
Sub Macro2() Application.ScreenUpdating = False Dim n As Long n = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row '↓ ほとんど自動記録(^^; With Worksheets("Sheet2").Range("A1:E5") .FormulaArray = _ "=COUNTIF(Sheet1!R1C1:R" & n & "C1,CHAR(9008+{1;2;3;4;5})&CHAR(9024+{1,2,3,4,5}))" .Value = .Value .Replace What:="0", Replacement:="", LookAt:=xlWhole, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False End With Application.ScreenUpdating = True End Sub ほとんど遊び(^^; 参考まで
お礼
ありがとうございます。 只今悪戦苦闘で、一度やってみます。
- fujillin
- ベストアンサー率61% (1594/2576)
ご自分で作成するのであれば以下の手順で・・・ 0)準備:ブックBをクリアしておく 1)ブックAの1行分の処理をブックAのA列の行数だけ繰り返す構文を作成 <以下、1行分の処理(n行目)> 2)ブックAのn行目、A列の値を読む 3)2の文字を分解する(そのまま、行と列の指定に使用できる) 4)ブックBの3で得られた行列のセルの値を、+1する。 <ここまでを繰り返し>
お礼
早速のご回答ありがとうございます。 一度試作してみます。
お礼
ありがとうございます。 皆様から頂きましたヒントを元に試しております。