プロが教えるわが家の防犯対策術!

Excel VBA初心者です。

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

A 回答 (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セルの結合で、ごまかした。優先や組み合わせのロジックは、質問に書いてないし、普通はロジックが複雑になる。質問さガ考え、判らなければ別質問のテーマだろう。
ーー
異なるシートのセルのコードでの表現ぐらい勉強して、質問しているのかな。
    • good
    • 0

回答ではありません。



「不明な点」
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
    • good
    • 0

セルデータが


数値かどうかは、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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!