[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『特定のシートだけ処理がしたい』(ろくろ)
こんにちは
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.