sheet1に一行目は項目欄で A1氏名、B1山、C1川、D1谷、E1空、・・・L1合計 があり、A列に各人の氏名があり各項目欄に金額があったりなかったりする表があります。
sheet2には封筒サイズを設定してこれを印刷します。
ここで、sheet2のA1に氏名を印刷します。sheet1の項目中に1つの金額しかない人の分はA1に氏名、A2に該当の項目名、B2に金額、A3に合計の文字、B3に合計金額、罫線をA1:B3に引き印刷。
金額が3項目にある人(山、谷、空)は、A1に氏名、A2に山、B2に金額、A3に谷、B3に金額、A4に空、B4に金額、A5に合計、B5に合計金額、罫線をA1:B5に引き印刷。このように順次印刷するマクロの記述方を教えてください。お願いします。
No.1
- 回答日時:
一例です。
Sub test01()
Set s2 = Sheets("Sheet2")
With Sheets("Sheet1")
x = .Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To x
With s2
.Range("A1:B5").ClearContents
.Range("A1:B5").Borders.LineStyle = xlNone
End With
n = 1
For Each c In .Range(.Cells(i, "B"), .Cells(i, "L"))
s2.Cells(1, "A").Value = .Cells(i, "A").Value
If c.Value <> "" Then
n = n + 1
s2.Cells(n, "A").Value = c.Offset(-i + 1).Value
s2.Cells(n, "B").Value = c.Value
End If
Next c
s2.Cells(n + 1, "A").Value = "合計"
s2.Cells(n + 1, "B").FormulaLocal = "=SUM(" & s2.Range(s2.Cells(2, "B"), s2.Cells(n, "B")).Address & ")"
s2.Range(s2.Cells(1, "A"), s2.Cells(n + 1, "B")).Borders.LineStyle = xlContinuous
s2.PrintOut
Next i
End With
End Sub
No.2
- 回答日時:
merlionXXです。
先ほどのでも動きますが、少しだけ手直ししました。
なお、印刷はテストのためプレビューにしてあります。
コードにコメントもつけておきました。
Sub test01()
Dim s2 As Worksheet, x As Long, i As Long, n As Integer, c As Range '変数宣言
Set s2 = Sheets("Sheet2") 'Sheet2をs2とする
With Sheets("Sheet1") 'Sheet1において
x = .Cells(Rows.Count, "A").End(xlUp).Row 'A列最終行を取得しxに代入
For i = 2 To x '2~xまでをiに代入
With s2 's2において
.Range("A1:B5").ClearContents 'データクリア
.Range("A1:B5").Borders.LineStyle = xlNone '罫線クリア
End With
s2.Cells(1, "A").Value = .Cells(i, "A").Value '氏名転記
n = 1 'nに1を代入
For Each c In .Range(.Cells(i, "B"), .Cells(i, "L")) 'B~L列のi行各セル
If TypeName(c.Value) = "Double" Then '数値であれば
n = n + 1 'nに1を加算
s2.Cells(n, "A").Value = c.Offset(1 - i).Value '項目名転記
s2.Cells(n, "B").Value = c.Value '数値転記
End If
Next c '次セルへ進み繰り返し
With s2 's2において
.Cells(n + 1, "A").Value = "合計" '文字入力
.Cells(n + 1, "B").Formula = "=SUM(" & .Range(.Cells(2, "B"), .Cells(n, "B")).Address & ")" '合計計算式入力
.Range(.Cells(1, "A"), .Cells(n + 1, "B")).Borders.LineStyle = xlContinuous '罫線作成
.PrintPreview '印刷プレビュー
End With
Next i '次行に進み繰り返し
End With
End Sub
この回答への補足
ありがとうございました。質問の中で ここでsheet2のA1に氏名を印刷しますは、ここでsheet2のA2に氏名を印刷しますです。そのためA3から項目名が始まります。教えていただきました手直しの分で項目名が表示されません。よろしくお願いします。
補足日時:2009/04/07 17:43No.3ベストアンサー
- 回答日時:
> 質問の中で ここでsheet2のA1に氏名を印刷しますは、ここでsheet2のA2に氏名を印刷しますです。
そのためA3から項目名が始まります。> 教えていただきました手直しの分で項目名が表示されません。
質問に書いた配置に誤りがあったということですね?
ただ、Sheet2のA1に名前を表示しようがA2に表示しようが、そのすぐ下から項目名が表示されるはずです。
それが表示されないということは、Sheet1の方の配置説明も違っているのではないですか?
前回の回答ではhoshi7777さんが書いた通り、Sheet1の1行目が項目欄で A1が氏名~以下各項目としてコードを書きましたが、これも1行ずれてるんじゃないですか?
そうであれば、以下のマクロをお試しください。
Sub test02()
Dim s2 As Worksheet, x As Long, y As Long, i As Long, n As Integer, c As Range '変数宣言
Set s2 = Sheets("Sheet2") 'Sheet2をs2とする
With Sheets("Sheet1") 'Sheet1において
x = .Cells(Rows.Count, "A").End(xlUp).Row 'A列最終行を取得しxに代入
y = s2.Cells(Rows.Count, "A").End(xlUp).Row 's2,A列最終行を取得しyに代入
For i = 3 To x '3~xまでをiに代入
With s2 's2において
.Range("A2:B" & y).ClearContents 'データクリア
.Range("A2:B" & y).Borders.LineStyle = xlNone '罫線クリア
End With
s2.Cells(2, "A").Value = .Cells(i, "A").Value '氏名転記
n = 2 'nに2を代入
For Each c In .Range(.Cells(i, "B"), .Cells(i, "L")) 'B~L列のi行各セル
If TypeName(c.Value) = "Double" Then '数値であれば
n = n + 1 'nに1を加算
s2.Cells(n, "A").Value = .Cells(2, c.Column).Value '項目名転記
s2.Cells(n, "B").Value = c.Value '数値転記
End If
Next c '次セルへ進み繰り返し
With s2 's2において
.Cells(n + 1, "A").Value = "合計" '文字入力
.Cells(n + 1, "B").Formula = "=SUM(" & .Range(.Cells(3, "B"), .Cells(n, "B")).Address & ")" '合計計算式入力
.Range(.Cells(2, "A"), .Cells(n + 1, "B")).Borders.LineStyle = xlContinuous '罫線作成
.PrintPreview '印刷プレビュー
End With
Next i '次行に進み繰り返し
End With
End Sub
この回答への補足
お手数掛けています。本当に申し訳ありません。質問でsheet1は一行目が項目名としていましたが。一行目は空欄で二行目が項目名でした。
そのため項目名が表示されなかったものです。本当に申し訳ありませんでした。よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの散布図で新たに入力した値のデータラベルが空欄になる現象 1 2022/04/26 09:31
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- 会社経営 法人口座を貸してビジネスする場合の取り分 3 2023/03/20 11:00
- Excel(エクセル) 列を自動で追加したい 3 2022/07/11 12:58
- Excel(エクセル) 隣り合っていないセルを まとめて税込表示したい 8 2022/09/25 14:32
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- 確定申告 貸株金利を確定申告する際について 2 2023/03/09 14:57
- その他(ビジネス・キャリア) エクセルで一覧表を作るときのレイアウト、月日と項目の配置について相談です。 2 2023/04/11 09:37
- PDF 2つのPDFを重ねる方法はありますか? 4 2023/01/30 14:04
- Excel(エクセル) Excel VBAプルダウンの値を変えながら2枚ずつ印刷する方法? 4 2022/05/27 13:04
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エラーの意味は? Lvalue req...
-
VBAでダブルコーテーション入り...
-
EXCEL/VBA 変数の値をクリップ...
-
C言語 列挙型(enum型)変数について
-
processing エラーで、 "cannot...
-
テキストボックスの値を変数に...
-
umu *= 2;てどんな意味があるの...
-
[VBS]変数を定数に変換する方法...
-
【VBA】複合代入演算子
-
7行テトリスコードで分からな...
-
datagridviewに行...
-
Variant型で宣言してるのにEmpt...
-
整数xxxが大き過ぎますというエ...
-
i++と++i ってどう違うのですか?
-
画像のプログラムに関して質問...
-
C言語(高校1年の内容)について
-
Java認定試験3級の問題です。 ...
-
C言語 exitの使い方
-
フォームを開くときに、コンボ...
-
エクセルへのデータの貼付時に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでダブルコーテーション入り...
-
エラーの意味は? Lvalue req...
-
C言語 列挙型(enum型)変数について
-
EXCEL/VBA 変数の値をクリップ...
-
整数xxxが大き過ぎますというエ...
-
テキストボックスの値を変数に...
-
[VBS]変数を定数に変換する方法...
-
Variant型で宣言してるのにEmpt...
-
jsp~jspにhiddenを使って変数...
-
processing エラーで、 "cannot...
-
python の 連鎖代入の文法
-
i++と++i ってどう違うのですか?
-
プログラミングで変数と関数の...
-
C言語 アロー演算子について質...
-
「%」を使って、偶数か奇数かを...
-
JavaScriptをURLから直接実行し...
-
VBA 1行で複数の代入を行った...
-
ExcelのVBAでをA列に第0〜19項...
-
無名関数のメリットがよくわか...
-
コマンドプロンプト バッチ|結...
おすすめ情報