• 締切済み

【Excel VBA】串刺し集計について

Excel VBA初心者です。 串刺し集計について質問させてください。 同じ構成のシートが3つあります。中には数字や文字列が入っています(各シートの同じセルに数字と文字列が入ることは無し)。 串刺しのイメージで数字が入っているセルは合計を、文字列が入っているセルにはどれか1つ(規則もマクロに入れる、例としては○、×、-であれば○など)を合計用の同じセルにいれたいのですが、マクロの組み方をご教授願います。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

>マクロの組み方をご教授願います コードそのものを回答者に書けと言うのは、丸投げでこのコーナーの規約違反。丸投げが横行したら、回答者は大変。自分で勉強してコードを作るのが本来のあり方。 ーー 質問も表現が要領を得ない。 3つのシートを(2つで良いと思うが)模擬実例を書くこと。 >中には数字や文字列が入っています こんなこと書く必要はないでしょう。 >各シートの同じセルに数字と文字列が入ることは無し)。 どういう意味?セルには文字列か数字かどちらか入っている? 当たり前。abc123と言うようなのはないということか? しかしこれも文字列だよ。 あるいは、シート1のA2が数字で、シート2のA2が文字列と言うことはないといいたいのか。 ーー 3表は同じ列項目(行項目)構成ではないということか。 >串刺しのイメージで数字が入っているセルは合計を 3シート各々でセル番地単位でやるのか? だから模擬実例が必要なんだ。VBAは(コード例を挙げてほしいのだろうが)行と列の構成がわからないと組めないのだ。 回答者にそこまで推測させて回答させるのは、配慮が足りない。 >規則もマクロに入れる、 とはどういうこと。 優先順位か何かを、プログラムのロジックに入れるということか。それはどういう考えに刷るのか?質問者が決めなきゃ。ルールによっては大変難しい。 == 下記を参考にして、色々考えてみてください。 Sub test01() Dim sh1, sh2, sh3, sh4 As Worksheet Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") Set sh3 = Worksheets("Sheet3") Set sh4 = Worksheets("Sheet4") '-- For Each cl In sh1.Range("a1:C10") r = cl.Row: c = cl.Column If IsNumeric(cl) Then '--3セル加算 sh4.Cells(r, c) = cl + sh2.Cells(r, c) + sh3.Cells(r, c) Else '--3セル結合(小生の独断で) sh4.Cells(r, c) = cl & sh2.Cells(r, c) & sh3.Cells(r, c) End If Next End Sub 上記はSheet1の1つのセルについて、数値か文字列で処理を変えている。 Sheet1-Sheet3の同位置セルには、数値と文字列の混合はないとする(加算がエラーになるから)。 文字列の場合、簡単なので、3セルの結合で、ごまかした。優先や組み合わせのロジックは、質問に書いてないし、普通はロジックが複雑になる。質問さガ考え、判らなければ別質問のテーマだろう。 ーー 異なるシートのセルのコードでの表現ぐらい勉強して、質問しているのかな。

  • ki-ro-ro
  • ベストアンサー率49% (106/213)
回答No.2

回答ではありません。 「不明な点」 1)エクセルのバージョン 2)表の構成 数字が入ってるセル(B2~B100など) 文字列が入ってるセル(C2~C100など) 「例としては○、×、-であれば○など」ではなく、具体的に何が入るのか。 また、合計用が○、×、-になる条件。 (3つのシートが一致してたら○とか、sheet1~3が○、×、-と一致しなかったらとか。) 明確になれば、優しい人が正確なコードを書いてくれるかもしれません。 私もVBAはド素人ですので、無茶苦茶なものしか書けません。 ※ 足りないコードもあります。と前置きした上で。 数字はA1~A10・文字はB1~B10・sheet1~3にデータがあり、sheet合計用の同じセルに入れれるとして。 sheet1が○でsheet2が×でsheet3が-の時の条件だけ。 Sub test() For i = 1 To 10 goukei = Worksheets("sheet1").Cells(i, 1) + Worksheets("sheet2").Cells(i, 1) + Worksheets("sheet3").Cells(i, 1) Worksheets("合計用").Cells(i, 1) = goukei go = Worksheets("sheet1").Cells(i, 2) + Worksheets("sheet2").Cells(i, 2) + Worksheets("sheet3").Cells(i, 2) If go = "○×-" Then Worksheets("合計用").Cells(i, 2) = "○" Next i End Sub

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

セルデータが 数値かどうかは、IsNumeric関数 文字列どうかは、TypeName関数 で調べればよいと思います。 串刺し計算を「マクロの記録」して得られたコードを編集してみました。 Sub tes串刺し計算1()   Dim i As Long   For i = 1 To 3     If TypeName(Sheets("Sheet2").Range("B" & i + 1).Value) = "String" Then       Sheets("Sheet1").Range("B" & i + 1).Value = "○"     ElseIf IsNumeric(Sheets("Sheet2").Range("B" & i + 1).Value) Then       Sheets("Sheet1").Range("B" & i + 1).Value = "=SUM(Sheet2:Sheet4!B" & i + 1 & ")"       Sheets("Sheet1").Range("B" & i + 1).Value = Sheets("Sheet1").Range("B" & i + 1).Value     End If   Next i End Sub

関連するQ&A