電子書籍の厳選無料作品が豊富!

先日した質問に追加があるのですが、
『A2:J100の範囲に顧客住所録データがあり、
それを別シートにペーストする時、
F列は、宛先シールの印刷枚数が入っているので、
Wordで差し込み印刷をする為のエクセルのデータを作る為
2行目のデータが3枚必要ならば、3行ペーストする方法。』

追加の質問:
K列に『1/3、2/3、3/3』と、入れるにはどうしたら
よいか、すみませんが御指導下さい。宜しく御願い致します。

A 回答 (5件)

こんばんは。

 #3です。

Cells(idx, 11) = "1"
Cells(idx + 1, 11) = .Value
Else
Cells(idx, 11) = "1"

の部分を追加されたのだと思いますが、前半の処理は複数の行に対して行わなければならないはずが、1行(とその次の行)にしか行っていませんし、代入している数字がご要望の「1/3」のような記述にもなっていませんね。
後半の部分は「複数でない場合」(=1行だけ)の場合なので、作成なさったように「1」と記述するか、他に合わせて「1/1」とするのかどちらでしょうか?

さらに、エクセル特有のセルの書式というものも考慮しなければなりません。分数表記という書式がありますからそれを利用するか、文字列にするか・・・前者だと1/1という表記がうまくいかないですし、後者の場合、書式設定を文字列に指定しないでうっかり入れると、数字や日付として判断されちゃったりします。

とりあえず、その部分だけの例です。
 For tmp = 1 To .Value '複製した行数回番号を入れる
   '番号は "'"+順番+"/"+総数  (Str()は数字を文字化する関数です)
  Cells(idx + tmp - 1, 11).Value = "'" & Str(tmp) & "/" & Str(.Value)
 Next tmp
Else
 Cells(idx, 11).Value = "' 1/ 1"  '1枚の場合は固定値

*)1枚は1/1で表記するものとしています。また値は全て文字列で扱うことにしていますが、セルの書式を設定するのが面倒なので、'1/3のような文字列入力でまかなっています。
なお、tmpという変数が増えてしまいましたので、最初にDimで宣言しておく方が良いでしょう。(IntegerまたはLong)

この回答への補足

補足はありません。

補足日時:2008/10/12 07:57
    • good
    • 0
この回答へのお礼

出来ました!思いどおりのものになりました!!
以前の質問のご回答のおかげで作業効率が大変良くなったのに
私の作った宛先シールを貼る部署の方から、
今回のような要望を受け、最悪自分が出来なければ
また以前のようにコピペを繰り返すしかないと落胆していました。
これ以上要望がないかを確かめた後お礼を申し上げたいと思い、
お礼内容に時間がかかってしまってすみませんでした。
完璧に完成しました。
そして、コード内容が理解出来たことがなにより嬉しいです。
私が理解出来る様にして下さった事も含めて
本当に御指導どうもありがとうございました。

お礼日時:2008/10/12 08:43

>2行目のデータが3枚必要ならば、3行ペーストする方法。


どの列に3行とか、繰り返す回数は入っているのかな。
前の質問と関連すすなら、この質問にも、前の質問番号を書くこと。回答者に載せてもらって読者はわかるというのはおかしい。
ーー
それに書式等が移らないが、初心者は特に、Copy方ではなく、1行ずつ上行からの代入処理の方法を勧める。
例データ
A列  B列  C列(重複回数)
ax3
by2
cz1
du4
C列に重複行数指定とする。
コード
Sub test01()
d = Range("A65536").End(xlUp).Row
For i = d To 1 Step -1 '下行から処理がミソ
k = Cells(i, "C") 'C列から重複回数取得
For l = i + 1 To i + 1 + k - 1 - 1 '重複回数-1回だけ繰り返し

Rows(l).EntireRow.Insert '行挿入
For j = 1 To 2 'A-B列代入
Cells(l, j) = Cells(i, j)
Next j
Next l
Next i
End Sub
ーーー
結果
ax3
ax
ax
by2
by
cz1
du4
du
du
du

この回答への補足

補足はありません。

補足日時:2008/10/08 20:56
    • good
    • 0
この回答へのお礼

前回の質問番号をNo.1の方に載せていただきまして、
有難う御座いました。(本来ならば、No.1の方のお礼内容に書くべき
ところをすみません。)おっしゃるとおりで恥ずかしかったです。
そして、コードも教えて下さって有難う御座いました。

お礼日時:2008/10/08 21:10

勉強中ということでしたので、ヒントのみです。



 Rows(idx + 1).Resize(.Value - 1).Insert shift:=xlDown
でF列の数字分(.Value)の行の挿入をしています。
(1行は最初にあるので、実際は.Value-1行を挿入している)

この時に(この後に)、挿入された行のK列に
 行数番号(1~.Value)+"/"+全体行数(.Value)
という文字列を入れてゆけばよいでしょう。
(数字を+演算しても文字の連結になりませんのでご注意)

この回答への補足

補足はありません。

補足日時:2008/10/08 22:21
    • good
    • 0
この回答へのお礼

御指導ありがとうございます。
早速取り組んでみたのですが、
いきづまってしまって出来ませんでした。
本当に恐縮ですが、解答を教えて頂きたく御願い申し上げます。
現状のコードを貼り付けてみました。どうぞ宜しくお願いします。
Sub Macro1()
Dim idx As Integer
ActiveSheet.Copy after:=ActiveSheet
For idx = Range("A65536").End(xlUp).Row To 1 Step -1
With Cells(idx, "F")
If IsNumeric(.Value) Then
If .Value > 1 Then
Rows(idx).Copy
Rows(idx + 1).Resize(.Value - 1).Insert shift:=xlDown

Cells(idx, 11) = "1"
Cells(idx + 1, 11) = .Value

Else
Cells(idx, 11) = "1"

End If
End If
End With
Next idx
Application.CutCopyMode = False
End Sub

お礼日時:2008/10/08 22:32

(1)、Sheet1のA2:J2を選択コピー


(2)、Sheet2のA1:A3に貼り付け
(3)、K1に、'1/ と入力
(4)、K3までフィルコピー(選択枠の右下角の■をドラッグする)
(5)、選択状態のまま、「置換」で、/ を /3 に「すべて置換」

といった手順を「マクロの記録」すれば必要なサンプルコードが得られます。
得られたコードを基にして
貼り付け行数の取得と反映
貼り付け先の決定
コピー&ペーストの繰り返し処理
等を加味すれば良いと思います。

この回答への補足

補足はありません。

補足日時:2008/10/08 20:17
    • good
    • 0
この回答へのお礼

すみません。やっぱりわかりませんでした。
しかし、どうやって取り組んでいくかを理解しました。
御指導有難う御座います。

お礼日時:2008/10/08 20:29

>先日した質問


エクセルVBAで、行コピーを複数行にペーストする方法
http://okwave.jp/qa4373943.html

>K列に『1/3、2/3、3/3』と
何に対して1/3とか2/3・3/3と決まっているのでしょう?

この回答への補足

分母が総枚数で、分子がページ数とし、
ひとつの顧客に対して3枚(3行)なら、3を分母とする。
という感じです。変な書き方をしてすみません。

補足日時:2008/10/08 20:11
    • good
    • 0
この回答へのお礼

質問を読んで下さってありがとうございます。

お礼日時:2008/10/08 20:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!