[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『特定のシートだけ処理がしたい』(ろくろ)
こんにちは
ExcelのVBAで質問があります。
特定のシート(例:日付_A,日付_A)のように“_A”というシートがあれば
そのシートのB列、AL列をコピーして作業シートに貼り付けたい場合
どのように処理を書けばいいでしょうか?
作業シートは以下の間隔で貼り付けたいです。
1つ目のシートはB列C列
2つ目のシートはF列G列
3つ目のシートはJ列K列
・
・
・
< 使用 Excel:Excel2013、使用 OS:Windows7 >
Sub 実験() Dim SH As Worksheet Dim c As Long
With Worksheets("作業シート").Range("B1:C1") For Each SH In Worksheets If SH.Name Like "*_A" Then MsgBox "【" & SH.Name & "】は処理対象だよ" & vbLf & "出力先は【" & .Offset(, c * 4).Address(False, False) & "】だよ" c = c + 1 End If Next SH End With End Sub
(もこな2 ) 2020/05/18(月) 17:23
>そのシートのB列、AL列をコピーして作業シートに >1つ目のシートはB列C列 >2つ目のシートはF列G列 >3つ目のシートはJ列K列
Sub Test() Dim sh As Worksheet Dim i As Long
For Each sh In Worksheets If sh.Name Like "*_A" Then i = i + 1 sh.Range("B:B,AL:AL").Copy Worksheets("作業シート").Cells(1, i * 4 - 2) End If Next sh End Sub
(ピンク) 2020/05/18(月) 17:59
出来ました!
ありがとうございます。
(ろくろ) 2020/05/18(月) 18:11
作業シートは以下の間隔で貼り付けたいです。
1つ目のシートはB列C列
2つ目のシートはF列G列
3つ目のシートはJ列K列
・
・
・
上記処理は出来ました。
次にやりたいのが日付を取り出す処理です。
貼り付けたシートのC列、G列、K列に日付ごとのデータが入っています。
書式は"yyyy/m/d h:mm"です。
そこから日付だけを取り出し、それぞれをA列、E列、I列に入れたいです。
取り出す日付の書式"yyyy/m/d"で1つだけです。
range("A1")/range("E1")/range("J1")の様に入れたいです。
※必ずB列、C列には値が入っていますが、最終列はデータによって変動があります。
拙い説明で申し訳ありませんが、よろしくお願いいたします。
(ろくろ) 2020/05/19(火) 13:14
>※必ずB列、C列には値が入っていますが、最終列はデータによって変動があります。
それならB列orC列で最終行を調べられるのでは?とおもいますが。。。
(もこな2 ) 2020/05/19(火) 13:26
今のマクロは以下です。
この処理を最終列までマクロで出来ないでしょうか?
Sub Macro1()
Dim dDate As Date Dim MaxCol As Long
'最終列
MaxCol = Cells(1, Columns.Count).End(xlToLeft).Column
dDate = DateValue(Range("C2")) Range("A1") = (CStr(dDate)) Range("A1").NumberFormatLocal = "yyyy/m/d" End Sub (ろくろ) 2020/05/19(火) 13:37
提示ものも、CStr関数を使う必要性がピンときませんが↓のようなことだったりしますか?
Sub 実験() With Range("A1") .Value = Format(Range("C2").Value, "yyyy/m/d") .NumberFormatLocal = "yyyy/m/d" End With End Sub
(もこな2 ) 2020/05/19(火) 14:25
ご提示して頂いた処理で欲しい値が取れました!
分からないのはどの様にループ処理を書けばいいかで悩んでいます。
(ろくろ) 2020/05/19(火) 14:58
Sub Macro1()
Dim i As Long
Dim MaxCol As Long
MaxCol = Cells(1, Columns.Count).End(xlToLeft).Column
For i = 3 To MaxCol Step 4 Cells(2, i).Copy Cells(2, i).Offset(-1, -2) Cells(2, i).Offset(-1, -2).NumberFormatLocal = "yyyy/m/d" Next End Sub (ろくろ) 2020/05/19(火) 15:33
実は↓を書きこもうとして更新したらメッセージに気づきました。
(なので行ずれは想定してません)
Sub 実験02() Dim 行 As Long
For 行 = 1 To 10 Cells(行, "A").Value = Format(Cells(行, "C").Value, "yyyy/m/d") Cells(行, "E").Value = Format(Cells(行, "G").Value, "yyyy/m/d") Cells(行, "I").Value = Format(Cells(行, "k").Value, "yyyy/m/d") Next 行 End Sub '----------------------------------------------------------------------------------- Sub 実験03() Dim MyRNG As Range
With ActiveSheet For Each MyRNG In Intersect(.UsedRange, .Range("C1,G1,K1").EntireColumn) MyRNG.Offset(0, -2).Value = Format(MyRNG.Value, "yyyy/m/d") Next MyRNG End With End Sub
なお、↓だと、時刻部分もコピーされちゃうから、私の「2020/05/19(火) 13:26」にいったこととほぼほぼ同じことになりません?
Cells(2, i).Copy Cells(2, i).Offset(-1, -2)
さらに、もしかして【行】は固定でよかったんでしょうか?
行不定なので、最終行をしらべて・・・とおもっていたんですがどうもそうではないかんじですか?
(もこな2 ) 2020/05/19(火) 15:59
参考に
Sub Test() Dim sh As Worksheet Dim i As Long
For Each sh In Worksheets If sh.Name Like "*_A" Then i = i + 1 With Worksheets("作業シート") sh.Range("B:B,AL:AL").Copy .Cells(1, i * 4 - 2) .Cells(1, i * 4 - 3).Value = Format(sh.Range("AL2").Value, "yyyy/m/d") End With End If Next sh End Sub
(ピンク) 2020/05/19(火) 16:06
ピンク様
昨日に引き続き教えて頂きありがとうございます。
また、昨日の処理も交えてコードを書いて頂いて感謝いたします!
(ろくろ) 2020/05/19(火) 18:23
Sub Macro1_改() Dim 列 As Long
For 列 = 3 To Cells(2, Columns.Count).End(xlToLeft).Column Step 4 Cells(1, 列 - 3).Value = Format(Cells(2, 列).Value, "yyyy/m/d") Next 列 End Sub
また、ピンクさんのように先日のコードと組み合わせることも可能ですね。
Sub 実験_改() Dim SH As Worksheet Dim c As Long With Worksheets("作業シート").Range("B1") For Each SH In Worksheets If SH.Name Like "*_A" Then Intersect(SH.Rows("1:" & SH.Cells.SpecialCells(xlCellTypeLastCell).Row), SH.Range("B:B,AL:AL")).Copy .Cells.Offset(, c * 4) .Cells.Offset(, c * 4 - 1).Value = Format(SH.Range("B2").Value, "yyyy/m/d")
c = c + 1 End If Next SH End With End Sub
(もこな2 ) 2020/05/19(火) 19:50
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.