- ベストアンサー
エクセル2007VBAで足し算がしたい!
- エクセルで異なるセルの数字を足し合わせる方法について教えてください。
- 具体的には、例1のような表で、2行目の両端の2つのセルの数字を選択して、合計を1行目のA1セルに表示する方法です。
- 選択するセルが変わる場合も考慮してください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
ANo3です。 > A1に値があればB1に、B1に値があればC1にという感じで Sub test02() Dim x As Long, y As Long If Application.Count(Rows(2)) < 2 Then MsgBox "2行目に数値セルが複数見当たりませんので加算できません。", vbCritical Else x = IIf(Cells(2, 1).Value <> "", Cells(2, 1).Value, Cells(2, 1).End(xlToRight).Value) y = IIf(Cells(2, Columns.Count).Value <> "", Cells(2, Columns.Count).Value, Cells(2, Columns.Count).End(xlToLeft).Value) If Cells(1, Columns.Count).End(xlToLeft).Value = "" Then Cells(1, Columns.Count).End(xlToLeft).Value = x + y Else Cells(1, Columns.Count).End(xlToLeft).Offset(, 1).Value = x + y End If End If End Sub ではいかがでしょう?
その他の回答 (5)
- K Kazz(@JazzCorp)
- ベストアンサー率31% (549/1751)
少しだけ不正値に対処... MsgBoxはデバッグ用も残してある... Sub SumEdge() Const xRow = 2 Dim xLL As Variant, xRR As Variant Dim xRange As Range Dim xLeft As Range Dim xRight As Range Set xRange = Rows(xRow) With xRange Set xLeft = .Find(What:="*", after:=xRange, LookIn:=xlValues, _ Searchorder:=xlByRows, SearchDirection:=xlNext) Set xRight = .Find(What:="*", after:=xRange, LookIn:=xlValues, _ Searchorder:=xlByRows, SearchDirection:=xlPrevious) End With If xRight Is Nothing Then MsgBox "データが何も入力されていません。" Else MsgBox xRow & "行目左端セル:" & xLeft.Column & ", 右端セル:" & xRight.Column & "列目" End If If (xLeft.Column < xRight.Column) Then MsgBox ("計算対象:[ " & xLeft & " ]+[ " & xRight & " ]??"), vbCritical xLL = 0 If IsNumeric(xLeft) Then xLL = xLeft End If xRR = 0 If IsNumeric(xRight) Then xRR = xRight End If Range("A1").Value = xLL + xRR Else MsgBox "2行目に複数のセルがないため計算できません。", vbCritical End If End Sub
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! VBAがご希望だというコトですが・・・ 関数での一例です。 A1セルに =IF(COUNT(2:2)>1,SUM(INDEX(2:2,,MIN(IF(2:2<>"",COLUMN(2:2)))),INDEX(2:2,,MAX(IF(2:2<>"",COLUMN(2:2))))),"") これは配列数式になってしまいますので、Shift+Ctrl+Enterキーで確定! この画面からコピー&ペーストする場合は、A1セルに貼り付け後 数式バー内で一度クリック! 編集可能になりますので、Shift+Ctrlキーを押しながらEnterキーで確定! 数式の前後に{ }マークが入り配列数式になります。m(_ _)m
お礼
おー!確かにできました!関数でもできるとは思いませんでした。 これはこれで使えそうですね。 ご回答ありがとうございました。
- emaxemax
- ベストアンサー率35% (44/124)
ご質問では明確でないのですが、 ・アクティブなシートの2行目に複数個の数値のセルがある。 ・複数個のセルの配置は一定ではない。 ・複数個のセルのうち、一番左側のセルと一番右側のセルの値を合計した値をA1セルに転記する。 ということでよろしいでしょうか? 2行目には数値のセルと空白セル以外はないものとして、 Sub test01() Dim x As Long, y As Long If Application.Count(Rows(2)) < 2 Then MsgBox "2行目に数値セルが複数見当たりませんので加算できません。", vbCritical Else x = IIf(Cells(2, 1).Value <> "", Cells(2, 1).Value, Cells(2, 1).End(xlToRight).Value) y = IIf(Cells(2, Columns.Count).Value <> "", Cells(2, Columns.Count).Value, Cells(2, Columns.Count).End(xlToLeft).Value) Range("A1").Value = x + y End If End Sub
補足
ご回答ありがとうございます。emaxemax様の解釈で間違いありません。 やってみたところうまくできました。ありがとうございます。 1つ私が間違えていたのですが、左端と右端のセルの合計をA1ではなく、 A1に値があればB1に、B1に値があればC1にという感じで、値が入力された セルの右隣の空白セルに返したいのですがどうすればよろしいでしょうか? Range("A1").Value = x + y ここの部分を変える必要があると思うのですが、 Range("C10").End(xlToRight).Next.Select.Value = x + y とやってみたところうまく動きませんでした。 お手数ですがご教示ください。 よろしくお願いします。
- mu2011
- ベストアンサー率38% (1910/4994)
ご質問分からは説明が不足していると思いますので補足して下さい。 (1)データ範囲はA2:F2で固定でしょうか。 (2)データは不連続な配置を考慮するのでしょうか。(例えば、A2とF2等) (3)数値データが無い又は1つの場合、A1はどうするのでしょうか。
補足
説明不足で申し訳ありません。 まずデータ範囲ですが固定ではなく変動します。 2行目のセルに数字をいくつか並べます。 ------------------------------------ A B C D E F G 1 2 3 6 10 18 ------------------------------------ 上記の例ではDから始まっていますが、実際にはCから始まったり Eから始まることもあるので、場所が変動しても並べた数字の右端と 左端の値を合計したいので上記の場合は3+18で21と表示します。 数値データがない場合はエラーを返すようにしたいと考えてます。 よろしくお願いします。
- suz83238
- ベストアンサー率30% (197/656)
これでどう? Sub xxx() For i = 1 To 4 With Cells(2, i) If .Value > 0 Then Range("A1").Value = .Value + .Offset(, 2).Value Exit Sub End If End With Next i End Sub
補足
ご回答ありがとうございます。 やってみましたが、4・5・6と数字を増やした際にうまく合計されませんでした。
お礼
完璧です!!思い通りの動きをしてくれています。 わかりやすくご回答頂きありがとうございます<m(__)m>