
一覧が入っているシートから宛名用のシール印刷をするために、VBAを使用しています。
ラベル印刷は
┏━━━━┓┏━━━━┓
┃ 奇数 ┃┃ 偶数 ┃
┗━━━━┛┗━━━━┛
みたいな感じです。
奇数:一覧シートの奇数行
偶数:一覧シートの偶数行
ですが、奇数の方はうまく出るのですが、偶数の方が1つおきになってしまいます。
これのどこが間違っているのでしょうか?
Worksheets("Sheet1").Select
Last = Cells(1).CurrentRegion.Rows.Count
For i = 2 To Last
Worksheets("Sheet1").Select
Yuubin = Cells(i, 1)
Name = Cells(i, 6)
Dim AllCount As Integer
Worksheets("TEST").Select
Kotae = i / 2
Amari = i Mod 2
AllCount = i / 12
If Amari = 0 Then
Ichi = (((Kotae - 1) * 9) + 1) - AllCount
Cells(Ichi, 2) = "〒" & Left(Yuubin, 3) & "-" & Right(Yuubin, 4)
Cells(Ichi + 7, 4) = Name & " 様"
ElseIf Amari = 1 Then
Ichi = (((Kotae - 1) * 9) + 1) - AllCount
Cells(Ichi, 17) = "〒" & Left(Yuubin, 3) & "-" & Right(Yuubin, 4)
Cells(Ichi + 7, 19) = Name & " 様" & i
End If '奇数偶数分岐
Next ' 全件分終るまで
よろしくお願いします。
No.5ベストアンサー
- 回答日時:
#2で回答した者です。
#4さんがおっしゃるように
Integer宣言した場合には、
1.5→2になります。(四捨五入されています)
#4さんの回答の
kotae = i / 2 - 0.3
でも1にはなりますが、
このような場合、Int関数により小数点以下切り捨てで
kotae = Int(i / 2)
のように記述した方が、
後々、修正等する場合に、分かりやすいと思います。
後、Allcountが気になっているのですが、
12人分で1ページとして次のページで1行分上にずらしたいという事でしょうか?
この場合も、上で述べたように
i=6でallcount = 1になってしまうので
allcount = int(i/12)
のようにしてください。
(この場合、i=2から始まっているので、1ページは2~11(10人分)
2ページは12~23(12人分)となってしまうので
allcount = int((i-2)/12)
にしないといけないと思います。)
私のプログラムでなら
y = Int((i - 2) / 2) * 9 + 1 - int((i-2)/12)
でしょうか?
私の考えが、KODAMARさんの考えているものかどうかよくわかりません。
KODAMARさんが考えている処理をもう少し具体的にあげていただかないと、
KODAMARさんが考えている処理にならないプログラムを提示されて、よろしくお願いしますと言われても
回答者も難しいと思います。
もし、考え違いをしているようなら、補足してください。
回答ありがとうございます。
Intを使って無事完成させることができました。
ありがとうございます。
>KODAMARさんが考えている処理にならないプログラムを提示されて、よろしくお願いしますと言われても 回答者も難しいと思います。
そうですね。すいませんでした。
>もし、考え違いをしているようなら、補足してください。
いえ、ちゃんと的を得た回答になっていました。
言葉足らずの説明でわかっていただきありがとうございました。
No.6
- 回答日時:
たびたび、すいません。
#5の最後の方は悪いように取らないで下さい。
私としては、処理内容だけ書いて、どうすればよいでしょうか?
という質問よりも好感をもっています。
ただ、人のプログラムを解析するのは、大変だという事も頭に入れて欲しいという事です。
文章を作るのが苦手なので、不快に思われたらすみません。
>私としては、処理内容だけ書いて、どうすればよいでしょうか? という質問よりも好感をもっています。
そういっていただけて嬉しいです。
>ただ、人のプログラムを解析するのは、大変だという事も頭に入れて欲しいという事です。
その通りですよね。
私だって人のプログラム読むの好きじゃないし。
(自分がかいたのだって時間がたてば読むのイヤなくらいですから)
それなのに回答くださってありがとうございました。
No.4
- 回答日時:
変数を明示的に宣言して
Dim last As Integer, i As Integer, kotae As Integer
Dim amari As Integer, ichi As Integer
>Kotae = i / 2 を次のように変えてください。
kotae = i / 2 - 0.3
理由 エクセルが、0.5をどう処理して良いか、迷っているみたいだから。
回答ありがとうございます。
言われてきづきました。
そうですよね、「0.5」ですよね。
ここが原因だったんですね。
ありがとうございました。
No.3
- 回答日時:
私は2列のラベルをワークシート上に作るとき、項目の列を行により左右する(一定列数加える)ことにより、制御しています。
Sub test06()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = Worksheets("sheet1")
Set sh2 = Worksheets("sheet2")
a = 4
For i = 1 To 10
j = Int((i - 1) / 2) + 1
k = (i - 1) Mod 2
' MsgBox j & "=" & k
sh2.Cells(j, 1 + k * a) = sh1.Cells(i, "A")
Next i
End Sub
を参考にして考えて見てください。i-1などがミソです。
この例では簡単にするため、例えばA列の郵便番号だけの
例にしています。
回答ありがとうございます。
ちょっと自分とは違った視点でみられていて
参考になりました。
今後参考にさせていただきます。
ありがとうございました。
No.2
- 回答日時:
このプログラムを[F8]で1行ずつデバッグするようにしましょう。
(1)Kotae = i / 2
Ichi = (((Kotae - 1) * 9) + 1) - AllCount
i=2の時、kotae = 1
i=3の時、kotae = 1.5
が入っています。
(2)Kotae = i / 2
Amari = i Mod 2
AllCount = i / 12
が正しい求め方かもう一度考えて見てください。
一応このように変更してみました。
Sub test()
Worksheets("Sheet1").Select
Last = Cells(1).CurrentRegion.Rows.Count
For i = 2 To Last
With Worksheets("Sheet1")
Yuubin = .Cells(i, 1)
Name = .Cells(i, 6)
End With
y = Int((i - 2) / 2) * 9 + 1
x = (i Mod 2) * 15 + 2
With Worksheets("TEST")
.Cells(y, x) = "〒" & Left(Yuubin, 3) & "-" & Right(Yuubin, 4)
.Cells(y + 7, x + 2) = Name & " 様"
End With
Next ' 全件分終るまで
End Sub
確認してみてください。
回答ありがとうございます。
普段変数を宣言?する時にwithとかは使わないんですが、
使ったほうがいいんですか?
今後参考にさせていただきます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Excel(エクセル) エクセルで同じ数字同士を自動で線で結ぶVBAを教えてください 6 2022/04/26 23:13
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) VBAでのループ順序について 3 2023/03/13 10:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【マクロ】【配列】3つのシー...
-
【条件付き書式】countifsで複...
-
文字の色も参照 VLOOKUP
-
エクセルの保護で、列の表示や...
-
Excelでの並べ替えを全シートま...
-
シートをまたぐ条件付き書式に...
-
エクセルで、チェックボックス...
-
ExcelのVlookup関数の制限について
-
エクセルのマクロで複数シート...
-
エクセルのセルはいくつまで使...
-
SUMPRODUCTにて別シートのデー...
-
VLOOKアップ関数の結果の...
-
Excelのセルの色を変えた行(す...
-
EXCELでシート1で作ったデータ...
-
VBAで繰り返しコピーしながら下...
-
このようなVBAを作りたいのですが
-
IV列以上の列
-
【VBA】複数のシートの指定した...
-
Excel VBAで条件付のコピーをし...
-
Excelに自動で行の増減をしたい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】【配列】3つのシー...
-
文字の色も参照 VLOOKUP
-
【条件付き書式】countifsで複...
-
ExcelのVlookup関数の制限について
-
エクセルの保護で、列の表示や...
-
Excelのセルの色を変えた行(す...
-
エクセルで、チェックボックス...
-
VBAで繰り返しコピーしながら下...
-
シートをまたぐ条件付き書式に...
-
Excelでの並べ替えを全シートま...
-
Excel の複数シートの列幅を同...
-
エクセルの列の限界は255列以上...
-
SUMPRODUCTにて別シートのデー...
-
VLOOKアップ関数の結果の...
-
excel 複数のシートの同じ場所...
-
【VBA】複数のシートの指定した...
-
Excelに自動で行の増減をしたい...
-
エクセル マクロ 標準モジュー...
-
Excel 2段組み
-
スプレッドシートでindexとIMPO...
おすすめ情報