VBAで初めてプログラミングしています。
初心者の質問で恐縮なのですが、よろしくお願いします。
数字が並んだ表を作成し、その表のいくつかを選択
します。(縦、横で結合可能な選択と前提)
選択したそれらの値を足した結果を、選択したセルを
結合したところに書き出す。
ということをしたいのですが、どうすれば出来ますで
しょうか?
私が思いつくのは、選択したセルの一つ一つのセルか
ら値を取得して別シートに書き出して、それを足し、
セルを結合した後に足した値をコピーする。というこ
とくらいです。
配列などを使って一気に出来る方法などありますで
しょうか?
FormulaArray なるものを使おうとしたのですが、上手
く行かず途方にくれております。
何卒、よろしくお願い致します。
No.1
- 回答日時:
VBA使ってんならぐるぐる回してメモリに溜め込んでおけばどうかな。
Dim r As Range ' 選択セル内をぐるぐる回す変数
Dim l As Long ' 一回メモリに溜め込む合計値 Doubleにしても良いだろう
Range("B4:D5").Select ' 仮にB4からD5を選択してみた(1)
l = 0 ' 合計を利用に先立って0にクリア
For Each r In Selection ' 選択範囲を1セル1セル回す
l = l + r.Value ' 足しこむ
r.Value = "" ' 一応セルをクリアしておく
Next ' 次へ
Selection.Merge ' セルを結合
Selection.Value = l ' 先ほど計算しておいた合計値を代入
例によってエラーチェックは全然していないので気をつけてね。
早速のご返信、ありがとうございます!
SelectionをForに指定することで1セルずつ回るの
ですか!勉強不足でした・・・。
こんな簡単な方法があったとは、、、もっと精進し
ないとです。
ありがとうございます!
No.2
- 回答日時:
>配列などを使って一気に出来る方法などありますで
>しょうか?
>FormulaArray
FormulaArray は、実際にセルを使ってしまいますし、もし使うのでしたら、FormulaArrayではなくて、Evaluate の中で計算したほうが速いですね。これは、Excel独特ですね。しかし、セルをいちいち使っていたのでは面倒だから、一旦、配列に値を入れてしまうわけです。それも、配列にあまり手を掛けると手間が掛かりますので、流し込んでしまいます。
以下は、流れに任せて作ったので、ほとんどチェックもしていません。(^^;
うまくいかなかったらすみません。
Sub CellMargeCalc()
Dim rng As Range
Dim ArrayRng As Variant
Dim v As Long, h As Integer '縦と横の数
Dim i As Long, j As Long
Set rng = Selection 'マウスで選択
ArrayRng = rng.Value '配列に入れる
With rng
v = .Rows.Count '行数
h = .Columns.Count '列数
'
If v > h Then
ReDim Preserve ArrayRng(1 To v, 1 To h + 1)
For i = 1 To v
For j = 1 To h
ArrayRng(i, h + 1) = ArrayRng(i, h + 1) + ArrayRng(i, j)
Next j
Next i
.ClearContents
For i = 1 To v
.Rows(i).MergeCells = True
.Rows(i).HorizontalAlignment = xlCenter
.Cells(i, 1).Value = ArrayRng(i, h + 1)
Next i
ElseIf v < h Then
ArrayRng = Application.Transpose(ArrayRng)
ReDim Preserve ArrayRng(1 To h, 1 To v + 1)
For i = 1 To h
For j = 1 To v
ArrayRng(i, v + 1) = ArrayRng(i, v + 1) + ArrayRng(i, j)
Next j
Next i
.ClearContents
For i = 1 To h
.Columns(i).MergeCells = True
.Columns(i).VerticalAlignment = xlCenter
.Cells(1, i).Value = ArrayRng(i, v + 1)
Next i
Else
MsgBox "縦横同数のため処理できません", 64
End If
End With
End Sub
ご返信、ありがとうございます!
詳細に書いて頂きましてありがとうございます!
しかし、私にはまだ知らない関数などが多々ありまして、、、
これから辞典とにらめっこしながら勉強させて頂き
たいと思います。
本当にありがとうございました!
No.3ベストアンサー
- 回答日時:
>私が思いつくのは、選択したセルの一つ一つのセルから値を取得して別シートに書き出して
VBAでは、変数が使えますから、足しこんだ結果を変数に記憶させて置くことができます。
セルの値の取得も変数を使って配列に入れる事が可能です。
今回は、足し算をワークシート関数[=SUM()]で計算したので簡単にできました。
また、下記のプログラムは[Ctrl]で個々に選択したセルは連続したセルとして扱われないので、結合対象になりません。
なので、範囲の選択は[Shift]やドラッグで選択した矩形範囲のみ対象です。
また、複数の選択範囲があっても処理できます。
Sub MergeArea()
Dim c As Variant
Dim Adr As Variant
Dim Tp As Variant
Dim sm As Single
Adr = Split(Selection.Address, ",")
Application.DisplayAlerts = False
For Each c In Adr
If InStr(c, ":") > 0 Then
Tp = Split(c, ":")
sm = Application.WorksheetFunction.sum(Range(c))
Range(c).Merge
Range(Tp(0)) = sm
End If
Next
Application.DisplayAlerts = True
End Sub
ご返信、ありがとうございます!
こちらも知らない関数があるのですが、辞典とにらめっこを
して理解できました!
わかりやすくして頂きましてありがとうございます!
この方法で頑張って行きたいと思います。
ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの数式で教えてください。 1 2022/10/25 09:26
- Excel(エクセル) VBA オリジナル関数で選択セルの合計を作成したい 3 2023/03/19 19:45
- Excel(エクセル) Excelにの以下の設定方法について教えてください! C列にデータ入力の設定をしています。(出、入を 3 2022/06/22 01:33
- Excel(エクセル) エクセルについて教えてください。 2 2023/06/14 11:11
- Excel(エクセル) エクセルでシート保護のかかり方の違いとセルの非保護の設定 3 2022/08/09 10:02
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
- Excel(エクセル) IF 関数で「〇〇 という文字を含む場合」の分岐処理で表示された数字はSUMで数字集計できますか? 3 2022/08/02 16:29
- Visual Basic(VBA) シート間で同じ値があったら指定範囲をコピーして貼り付け 1 2022/11/07 08:01
- Excel(エクセル) マクロVBA別Excelブックにデータ転記 2 2022/07/10 23:35
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
Excelで空白セル直前のセルデー...
-
エクセルVBA 配列からセルに「...
-
【Excel VBA】一番右端セルまで...
-
EXCEL VBA 文中の書式ごと複写...
-
Excel UserForm の表示位置
-
入力規則のリスト選択
-
特定の色のついたセルを削除
-
VBA 複数条件の分岐処理の上手...
-
DataGridViewで指定したセルの...
-
DataGridViewのフォーカス遷移...
-
エクセルのカーソルを非表示に...
-
指定した文字から指定した文字...
-
DataGridViewでグリッド内に線...
-
Rangeの範囲指定限界
-
エクセルの選択範囲のセルの値...
-
Excel VBA 同じ処理を複数回行...
-
エクセルの合計を自動で表示さ...
-
Excel VBA IF文がうまく動作し...
-
Excelのセルから日付情報を取得...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
エクセルVBA 配列からセルに「...
-
VBA 複数条件の分岐処理の上手...
-
Excelで空白セル直前のセルデー...
-
Excel UserForm の表示位置
-
EXCEL VBA 文中の書式ごと複写...
-
特定の色のついたセルを削除
-
VBA にて、条件付き書式で背景...
-
VBAでユーザーフォームにセル値...
-
【VBA】写真の貼り付けコードが...
-
【Excel VBA】一番右端セルまで...
-
Excel VBAでCheckboxの名前を変...
-
エクセルの合計を自動で表示さ...
-
【VBA】【ユーザーフォーム_Lis...
-
VBA:日付を配列に入れ別セルに...
-
Excel VBA IF文がうまく動作し...
-
下記のマクロの説明(意味)を...
-
入力規則のリスト選択
-
C# DataGridViewで複数選択した...
-
関数の引数でrangeを指定したとき
おすすめ情報