[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBA 隣のセルに値がある時だけ通し番号を振りたい』(ぶどう)
<やりたい事>
「Sheet0」の指定した行のみを、「Sheet1」にコピーしてサマリーを作成する。
1. 1行目はタイトル行
2. 2行目からデータを貼り付ける
3. B列に値があるときは、A列にA2から通し番号を振る
1.と2.は何とかマクロを作成出来たのですが、3.が上手く出来なくて困っております。
VBA初心者ですが、ご教授頂けるとありがたいです。
宜しくお願いします。
< 使用 Excel:Excel2007、使用 OS:Windows7 >
B列に値がない場合があるのでしょうか?
いずれにしても2.ができたのなら、そのときにA列に番号をふればいいと思いますが、 2.はどんなマクロを作りましたか?
(天邪鬼) 2014/07/23(水) 12:32
コマンドボタンを利用して以下のマクロを作成した後に、通し番号の話が出てきました。
Private Sub CommandButton1_Click()
'初期設定(コピー元とコピー先のシート、コピーする列を設定)
Dim srcSheet As Worksheet
Dim dstSheet As Worksheet
Dim copyColumns As String
Set srcSheet = Sheets("Sheet0")
Set dstSheet = Sheets("Sheet1")
copyColumns = "E,G,L,M,O,Q,W,Y,AG,AH"
Application.ScreenUpdating = False
Dim srcRowTop As Long
Dim srcRowBottom As Long
Dim dstRowTop As Long
Dim dstColumnLeft As Integer
Dim cols() As String
Dim i As Integer
'コピー元の最初と最後の行を取得
srcRowTop = 1
srcRowBottom = srcSheet.Cells(srcSheet.Rows.Count, 1).End(xlUp).Row 'A列の最後のデータの行
If (srcRowBottom = 1) And (srcSheet.Cells(1, 1) = "") Then '最後の行が1行目で、実は1行目にデータが無い場合
Exit Sub 'コピー元データなし
End If
'コピー先の最初の行を設定
dstRowTop = 1 'B1の1
dstColumnLeft = 2 'B2のB(=2)
'コピーする列名を配列へ取得
cols = Split(copyColumns, ",")
'コピー開始
For i = 0 To UBound(cols)
srcSheet.Range(cols(i) & srcRowTop & ":" & cols(i) & srcRowBottom).Copy Destination:=dstSheet.Cells(dstRowTop, i + dstColumnLeft)
Next
Application.ScreenUpdating = True
End Sub
(ぶどう) 2014/07/23(水) 14:04
コードの中身は良く見ていませんが、dstSheetの2行目から下に、 B列に値があればA列に連番をつけるだけならこんなのでよさそう。
Dim n As Long n = 1 'nは連番の最初の値
With dstSheet For i = 2 To .Cells(.Rows.Count, "B").End(xlUp).Row If .Cells(i, "B").Value <> "" Then .Cells(i, "A").Value = n n = n + 1 End If Next i End With
(天邪鬼) 2014/07/23(水) 14:57
If .Cells(i, "B").Value <> "" Then
.Cells(i, "A").Value = n
n-1で、連番にしていく発想にたどり着けずに
行番号-1でカウントして・・・と偏ったアイディアに捕らわれていました。
やりたい事が出来る為の色んな発想とアプローチが出来るようになって
VBAもっと使いこなしたいです!
本当にありがとうございました。
(ぶどう) 2014/07/23(水) 15:49
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.