- ベストアンサー
Excelのマクロについて
エクセルのまくろについて教えてください。 私が今やろうとしているのはsheet1に表を作成し、sheet2に見積書を作成します。 見積書に載せる項目はsheet1の表の中から抽出したいです。 そのときの条件としては、sheet1での表の中の計算結果が、 項目 計算結果 A 1 B 0 C 8 このような場合のときに計算結果が「0」になったものの項目はsheet2の見積書の項目には反映しないようにしたいです。 このようにするとsheet2での見積書は作成する条件によって行数が変わるようになります。 なので、自動的に見積書の行を増やしたりなくしたりするようなマクロを組みたいのです。 Excel2000です。 長々と書きましたがよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 ちょっと訂正。 Sub test() Dim cWS As Worksheet, pWS As Worksheet Dim i As Long, cnt As Long Set cWS = Worksheets("Sheet1") Set pWS = Worksheets("Sheet2") cnt = 1 For i = 1 To cWS.Range("A65536").End(xlUp).Row If cWS.Range("B" & i) <> 0 Then cWS.Range("A" & i).Resize(1, 2).Copy _ pWS.Range("A" & cnt).Resize(1, 2) cnt = cnt + 1 End If Next i End Sub
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
(1)Cells(i,j)(は行、は列の番目数)でセルの値を参照や設定できますが、シートが2つ以上ある場合は、当然どれかと言う、区別指定をしないといけません。 Sub test01() Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("計算表") Set sh2 = Worksheets("見積書") のようにします。勿論sh1,sh2は別の名称でも良い。 (2)計算書の計算結果(B列と仮定)項目が0ならと言うのは If sh1.Cells(i, "B") = 0 Then Else (3)データを持ってくる側の、見積書の第何番目の行かを指し示すポンンタ的な数をjとして使います 見積書に計算書からセルデータを持ってくるのは sh2.Cells(j, "D") = sh1.Cells(i, "B") j = j + 1 End If のように下行へ行くときにJ=J+1します。 当然見積書の新ページの処理に入る(新得意先や次2ページに行く)とき、J=(最上行の行番号)のセットが必要です。 (4)計算書の行を示すiは、計算書のイメージがつかめませんのですが、得意先が変ると言うことを捉えるロジックなどが必要なはずですが、そこが質問では見えません。
- papayuka
- ベストアンサー率45% (1388/3066)
シートの全容が不明なのでアドバイス程度です。 最終行をどう判定するかです。サンプルはSheet1側で必要なデータを判定しています。 例のデータが A1:B4 にあるとして、Sheet2に写します。 試す場合はテスト環境で試して下さい。 データが多い場合はオートフィルタで0を除いてSpecialCellsでコピーした方が早いでしょう。 Sub test() Dim cWS As Worksheet, pWS As Worksheet Dim i As Long, cnt As Long Set cWS = Worksheets("Sheet1") Set pWS = Worksheets("Sheet2") cnt = 1 For i = 1 To cWS.Range("A65536").End(xlUp).Row If cWS.Range("B" & i) <> 0 Then cWS.Range("A" & i).Resize(i, 2).Copy _ pWS.Range("A" & cnt).Resize(i, 2) cnt = cnt + 1 End If Next i End Sub