『配列の要素が1つの場合』(ウメ)
G列の日付に+3した値をB列に表示するマクロを組んでいます
一度だけ使用する表ではなく記録が続くのですが
記録する行が1つだと型が一致しません
9行目の〇印 For i = LBound(MyArr1, 1) To UBound(MyArr1, 1)
でエラーになってしまいます
2行以上あれば問題なくできます
調べたのですが原因が分かりません、、、
Dim MyArr1 As Variant Dim rngTop As Range Dim rngBottom As Range Dim i As Long Dim lastRow As Long lastRow = Ws.Cells(Rows.Count, 7).End(xlUp).Row Set rngTop = Ws.Range("G5") Set rngBottom = Ws.Cells(lastRow, 7)
MyArr1 = Ws.Range(rngTop, rngBottom).Value
〇For i = LBound(MyArr1, 1) To UBound(MyArr1, 1) MyArr1(i, 1) = MyArr1(i, 1) + 3 Next i
Ws.Range(rngTop, rngBottom).Offset(, -5).Value = MyArr1
A B C F E F G ・
1
2 見出し
3 ・
4 ・
5 ( ) 3/13
自分だけ使用するのであれば関数で解決なのですが
複数人使用し
また、このブック自体をコピーし項目ごとに使いまわすため
マクロで解決したいと考えています
初心者なので修正する部分や別案がありましたらご教示いただけますと幸いです
< 使用 Excel:unknown、使用 OS:unknown >
(ウメ) 2025/03/13(木) 10:38:43
他の有識者様の回答をお待ちくださいませ。。。m(__)m
(隠居Z) 2025/03/13(木) 10:48:19
for i=5 to lastRow
Ws.Cells(i,"A").Value=Ws.Cells(i,"G").Value + 3 next i
でいかがでしょうか
(ささみ) 2025/03/13(木) 11:10:04
Ws.Cells(i,"B").Value=Ws.Cells(i,"G").Value + 3
でよろしくお願いします
(ささみ) 2025/03/13(木) 11:13:05
ありがとうございます
根本の理解ができていませんでした
1つだと配列にならないのですね、、、
ささみ様
ご教示いただいたマクロで出来ました
ありがとうございます
(ウメ) 2025/03/13(木) 11:27:46
考え方の一つですが、最終行を1つ増やせば
Sub sample() Dim MyArr1 As Variant Dim rngTop As Range Dim rngBottom As Range Dim i As Long Dim lastRow As Long Set ws = ActiveSheet lastRow = ws.Cells(Rows.Count, 7).End(xlUp).Row Set rngTop = ws.Range("G5") Set rngBottom = ws.Cells(lastRow, 7) MyArr1 = ws.Range(rngTop, rngBottom.Offset(1)).Value '↑ここ For i = LBound(MyArr1, 1) To UBound(MyArr1, 1) MyArr1(i, 1) = MyArr1(i, 1) + 3 Next i ws.Range(rngTop, rngBottom).Offset(, -5).Value = MyArr1 End Sub (´・ω・`) 2025/03/13(木) 11:36:28
セル1つの場合はValueは配列にならないのでセル数に応じて場合分けすればいいでしょう。
Sub sample() Dim MyArr1() As Variant Dim sRng As Range Dim i As Long Set ws = ActiveSheet Set sRng = ws.Range("G5", ws.Cells(Rows.Count, 7).End(xlUp)) If sRng.Count = 1 Then sRng.Offset(, -5).Value = sRng.Value + 3 Else MyArr1 = sRng.Value For i = LBound(MyArr1, 1) To UBound(MyArr1, 1) MyArr1(i, 1) = MyArr1(i, 1) + 3 Next i sRng.Offset(, -5).Value = MyArr1 End If End Sub
(hatena) 2025/03/13(木) 12:07:15
> 自分だけ使用するのであれば関数で解決なのですが > 複数人使用し > また、このブック自体をコピーし項目ごとに使いまわすため > マクロで解決したいと考えています > 初心者なので修正する部分や別案がありましたらご教示いただけますと幸いです
別案ですが、マクロで式を設定して値に変換すればシンプルに実現できます。
Sub sample2() With Range("G5", Cells(Rows.Count, "G").End(xlUp)).Offset(, -5) .Value = "=G5+3" .Value = .Value End With End Sub
(hatena) 2025/03/13(木) 12:16:31
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.