Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5173 / 13646 ツリー ←次へ | 前へ→

【52250】シート1のリストをシート2でタックシールに配置 ゆばーば 07/11/4(日) 14:40 質問[未読]
【52251】Re:シート1のリストをシート2でタックシールに配置 かみちゃん 07/11/4(日) 14:42 発言[未読]
【52252】Re:シート1のリストをシート2でタックシールに配置 ゆばーば 07/11/4(日) 15:10 回答[未読]
【52254】Re:シート1のリストをシート2でタックシールに配置 かみちゃん 07/11/4(日) 15:16 発言[未読]
【52255】Re:シート1のリストをシート2でタックシールに配置 ゆばーば 07/11/4(日) 15:33 質問[未読]
【52256】Re:シート1のリストをシート2でタックシールに配置 かみちゃん 07/11/4(日) 16:20 発言[未読]
【52258】Re:シート1のリストをシート2でタックシールに配置 ゆばーば 07/11/4(日) 16:55 お礼[未読]
【52259】Re:シート1のリストをシート2でタックシールに配置 かみちゃん 07/11/4(日) 17:44 発言[未読]
【52261】Re:シート1のリストをシート2でタックシールに配置 ゆばーば 07/11/4(日) 18:08 お礼[未読]
【52262】Re:シート1のリストをシート2でタックシールに配置 かみちゃん 07/11/4(日) 18:13 発言[未読]
【52263】Re:シート1のリストをシート2でタックシールに配置 ゆばーば 07/11/4(日) 18:41 お礼[未読]
【52264】Re:シート1のリストをシート2でタックシールに配置 かみちゃん 07/11/4(日) 18:59 発言[未読]
【52265】Re:シート1のリストをシート2でタックシールに配置 ゆばーば 07/11/4(日) 19:36 お礼[未読]
【52257】Re:シート1のリストをシート2でタックシールに配置 Km 07/11/4(日) 16:29 発言[未読]

【52250】シート1のリストをシート2でタックシールに配置
質問  ゆばーば  - 07/11/4(日) 14:40 -

引用なし
パスワード
   教えて下さい!
Sheet1A列〜G列に商品CD・品名・サイズ・カラー・入庫日・入数・C/T数が入って、それが複数行あります。
Sheet2に横2枚、縦5枚のタックシール用のフォームを作りました。
そのA1に品番、A2に入庫日、A3に品名、A4にサイズ、A5にカラー、A6に入数(入り数は数字だけなので、「入」と言う文字をつけます。)を配置します。
それをB列、A列の空白セル、B列の空白のセル・・・の順にC/T数に入っている数分だけコピーをし、それが終わったら、2行目も繰り返す・・と言うのを作りたいのですが、うまくいきません。
どうかお知恵を貸してください。

【52251】Re:シート1のリストをシート2でタックシールに配置
発言  かみちゃん  - 07/11/4(日) 14:42 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> うまくいきません。

どこまでできていますか?
できているものがあれば、提示されてはいかがでしょうか?

【52252】Re:シート1のリストをシート2でタックシールに配置
回答  ゆばーば  - 07/11/4(日) 15:10 -

引用なし
パスワード
   かみちゃんさん

 ありがとうございます。
そーですね、どこまで出来ているかと言うと、Sheet2の1枚目のラベル貼付けまでです。
その後の「C/T」欄に入っている数分だけ順番にコピーをするところから解かりません。
まず、始めからやり方が間違っているかもしれないので、全ての流れを書かせて頂きました。超初心者で申し訳ございませんが、何卒よろしくお願いいたします。

【52254】Re:シート1のリストをシート2でタックシールに配置
発言  かみちゃん  - 07/11/4(日) 15:16 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> Sheet2の1枚目のラベル貼付けまでです。

さきほどのコメントにきちんと書かなかったのですが、そのできていることは、
VBAでしているのですか?手作業ですか?
VBAでしているならば、そのコードを、手作業でしたら、「マクロの記録」で
記録したコードを提示できませんか?

ここは、VBAの掲示板です。
まずは、ご自身でできているコードをきちんと提示しないと、丸投げ質問になって
しまいますよ。
コードのとっかかりもわからないので、何もできていないなら、その旨書かれたほうがいいです。

【52255】Re:シート1のリストをシート2でタックシールに配置
質問  ゆばーば  - 07/11/4(日) 15:33 -

引用なし
パスワード
   かみちゃん さん

そうですね。失礼致しました。
今までの所で、うまく動くのは以下までです。

Sub 貼付_Click()
'
' 貼付_Click Macro
' マクロ記録日 : 2007/11/4 ユーザー名 : yukari kikuchi
'

'
  Range("A5").Select
  Selection.Copy
  Sheets("Sheet2").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
  Sheets("Sheet1").Select
  Range("E5").Select
  Application.CutCopyMode = False
  Selection.Copy
  Sheets("Sheet2").Select
  Range("A2").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
  Sheets("Sheet1").Select
  Range("B5").Select
  Application.CutCopyMode = False
  Selection.Copy
  Sheets("Sheet2").Select
  Range("A3").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
  Sheets("Sheet1").Select
  Range("C5").Select
  Application.CutCopyMode = False
  Selection.Copy
  Sheets("Sheet2").Select
  Range("A4").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
  Sheets("Sheet1").Select
  Range("D5").Select
  Application.CutCopyMode = False
  Selection.Copy
  Sheets("Sheet2").Select
  Range("A5").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
  Sheets("Sheet1").Select
  Range("F5").Select
  Application.CutCopyMode = False
  Selection.Copy
  Sheets("Sheet2").Select
  Range("A6").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
  Range("A6").Select
  Application.CutCopyMode = False
  ActiveCell.FormulaR1C1 = "12 入"
  ActiveCell.Characters(4, 1).PhoneticCharacters = "ニュウ"
  Sheets("Sheet2").Select
  Range("A1:A6").Select
  Selection.Copy
  Range("B1").Select
  ActiveSheet.Paste
  
End Sub

いかがでしょうか?

【52256】Re:シート1のリストをシート2でタックシールに配置
発言  かみちゃん E-MAIL  - 07/11/4(日) 16:20 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>今までの所で、うまく動くのは以下までです。

ご提示いただいたコードのうち、

  Sheets("Sheet2").Select
  Range("A6").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
  Range("A6").Select
  Application.CutCopyMode = False
  ActiveCell.FormulaR1C1 = "12 入"

では、Sheet2のA6に"12 入"という文字が入るのですが、それでいいのでしょうか?

> Sheet2に横2枚、縦5枚のタックシール用のフォームを作りました。
> そのA1に品番、A2に入庫日、A3に品名、A4にサイズ、A5にカラー、A6に入数(入り数は数字だけなので、「入」と言う文字をつけます。)を配置します。
> それをB列、A列の空白セル、B列の空白のセル・・・の順にC/T数に入っている数分だけコピー

シートイメージがよくわかりません。

【Sheet2】
  A   B  C  D
1 品番
2 入庫日
3 品名
4 サイズ
5 カラー
6 入数
7

というイメージですか?

> B列、A列の空白セル、B列の空白のセル・・・の順に
これはどういう意味ですか?

あと、提示されたコードを整理すると、以下のようなコードになるかと思います。

Sub 貼付2()
 Sheets("Sheet2").Range("A1").Value = Sheets("Sheet1").Range("A5").Value
 Sheets("Sheet2").Range("A2").Value = Sheets("Sheet1").Range("E5").Value
 Sheets("Sheet2").Range("A3").Value = Sheets("Sheet1").Range("B5").Value
 Sheets("Sheet2").Range("A4").Value = Sheets("Sheet1").Range("C5").Value
 Sheets("Sheet2").Range("A5").Value = Sheets("Sheet1").Range("D5").Value
 Sheets("Sheet2").Range("A6").Value = Sheets("Sheet1").Range("F5").Value
 Sheets("Sheet2").Range("A6").Value = "12 入" '←不明
 Sheets("Sheet2").Range("A1:A6").Copy Sheets("Sheet2").Range("B1")
End Sub

【52257】Re:シート1のリストをシート2でタックシールに配置
発言  Km  - 07/11/4(日) 16:29 -

引用なし
パスワード
   ▼ゆばーば さん:

タックシールの簡単な作り方は・・・

タックシールは2列×5行で仕上がっているのですね(仕上げシートはシート1にする方が分かりやすい…コマンドボタンもシート1に作成させ)

このようなことで、

シート2に10行(項目行を除き)
A列からG列の7項目
  A   B   C   D    E    F    G   
1商品CD 品名 サイズ カラー 入庫日 入数  C/T
2
3
:
11
2行目から11行目にシート3の元データを貼り付けるための中間処理的な
シートです

シート3に全データを作成する…これはデータに制限は有りません

このような状態で
シート3から10列単位に、順次シート2のA2に貼り付ける…これをルーティン処理で
10行ずつ、シート2に貼り付けるコードを組みます。

シート2に貼り付けたデータとシート1とはエクセルの普通のリンク処理で
タックシールを作成する。

こんな構成でコードを作成されると非常に簡単なコードで済むと思いますが…
小生もタックシールを5種類ほど組んでいますが「基本的な方法は全てこのようなやり方でしていますが…大変楽です」

【52258】Re:シート1のリストをシート2でタックシールに配置
お礼  ゆばーば  - 07/11/4(日) 16:55 -

引用なし
パスワード
   かみちゃんさん、kmさん ありがとうございます。

kmさんの言う通り、いっぺんにやろうとしないで中間処理シートを作るほうが良いのでしょうか?

かみちゃんさん、コード訂正ありがとうございます。
G5の部分は、入っている数字(カートン数)の後に「入」と付けたいと思ったらあのようになってしまいました。

タックシールはA列とB列のみを使用し、1枚のシールがA1からA5で出来ています。
次にB1〜B5を使って同じシールを作り、次にA6〜A10、次にB6〜B10の順に指定枚数(C/T数)作りたいのです。
そのコピーする順番を指定するのと、「C/T」数のセルに入っている数分繰り返すところがよくわからないのです。
初心者過ぎて、大変申し訳ございません。

【52259】Re:シート1のリストをシート2でタックシールに配置
発言  かみちゃん E-MAIL  - 07/11/4(日) 17:44 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>タックシールはA列とB列のみを使用し、1枚のシールがA1からA5で出来ています。
>次にB1〜B5を使って同じシールを作り、次にA6〜A10、次にB6〜B10の順に指定枚数(C/T数)作りたいのです。
>そのコピーする順番を指定するのと、「C/T」数のセルに入っている数分繰り返すところがよくわからないのです。

とりあえず、以下のような感じでいかがでしょうか?

Sub 貼付3()
 Dim lngRow As Long
 Dim lngTuckRow As Long
 Dim cntCT As Integer
 
 lngTuckRow = 1
 'Sheet1の5行目〜10行目までを処理する場合
 For lngRow = 5 To 10
  Sheets("Sheet2").Range("A" & lngTuckRow).Value = Sheets("Sheet1").Range("A" & lngRow).Value
  Sheets("Sheet2").Range("A" & lngTuckRow + 1).Value = Sheets("Sheet1").Range("E" & lngRow).Value
  Sheets("Sheet2").Range("A" & lngTuckRow + 2).Value = Sheets("Sheet1").Range("B" & lngRow).Value
  Sheets("Sheet2").Range("A" & lngTuckRow + 3).Value = Sheets("Sheet1").Range("C" & lngRow).Value
  Sheets("Sheet2").Range("A" & lngTuckRow + 4).Value = Sheets("Sheet1").Range("D" & lngRow).Value
  Sheets("Sheet2").Range("A" & lngTuckRow + 5).Value = Sheets("Sheet1").Range("F" & lngRow).Value

  cntCT = Sheets("Sheet1").Range("G" & lngRow).Value
  If cntCT >= 2 Then
   Sheets("Sheet2").Range("A" & lngTuckRow).Resize(6).Copy Sheets("Sheet2").Range("B" & lngTuckRow)
   If cntCT >= 2 Then
    Sheets("Sheet2").Range("A" & lngTuckRow).Resize(6, 2).Copy _
     Sheets("Sheet2").Range("A" & lngTuckRow).Resize(6 * Int((cntCT + 1) / 2), 2)
   End If
   'C/T数が奇数の場合は、B列の最終行から6行を消去
   If cntCT Mod 2 = 1 Then
    Sheets("Sheet2").Range("B" & lngTuckRow).Offset(6 * Int(cntCT / 2)).Resize(6).ClearContents
   End If
  End If
  lngTuckRow = lngTuckRow + 6 * (Int((cntCT + 1) / 2))
 Next
End Sub

ポイントは、C/T数を2で割った数(小数点の場合は切上)分A列とB列を6行単位
でコピーしているところです。
C/T数が奇数の場合は、B列の最後の6行は余分なので消去しています。
これをSheet1の必要な行数分繰り返しています。(下記コードでは、5行目〜10行目までを処理しています)

【52261】Re:シート1のリストをシート2でタックシールに配置
お礼  ゆばーば  - 07/11/4(日) 18:08 -

引用なし
パスワード
   かみちゃんさん

 ありがとうございます!!
完璧に出来ました。
「C/T数を2で割る」と言う発想には脱帽です!
最後までご親切にお世話頂き心から感謝いたします。
重ねてお礼申し上げます。

【52262】Re:シート1のリストをシート2でタックシールに配置
発言  かみちゃん  - 07/11/4(日) 18:13 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>完璧に出来ました。
>「C/T数を2で割る」と言う発想には脱帽です!

言い忘れていましたが、C/T数が奇数のものが途中の行にあると、B列の部分に
所々空きが出て、シールが印刷されませんので、確認してみてください。
ここを詰めて印刷できるようにしたいという話であれば、もっとややこしいコード
にする必要があります。

【52263】Re:シート1のリストをシート2でタックシールに配置
お礼  ゆばーば  - 07/11/4(日) 18:41 -

引用なし
パスワード
   かみちゃん さん

>言い忘れていましたが、C/T数が奇数のものが途中の行にあると、B列の部分に
>所々空きが出て、シールが印刷されませんので、確認してみてください。
>ここを詰めて印刷できるようにしたいという話であれば、もっとややこしいコード
>にする必要があります。

はい、そのようでうすが、かえって境目がわかっていいですし、十分な結果だと思っています。
ありがとうございます。

ちなみに、貼り付けた数字の後に決まった文字を足すと言うのはやっぱり無理なのでしょうか?

【52264】Re:シート1のリストをシート2でタックシールに配置
発言  かみちゃん  - 07/11/4(日) 18:59 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> 貼り付けた数字の後に決まった文字を足す

Sheets("Sheet2").Range("A" & lngTuckRow + 5).Value = Sheets("Sheet1").Range("F" & lngRow).Value & " 入"
という感じでいかがでしょうか?

【52265】Re:シート1のリストをシート2でタックシールに配置
お礼  ゆばーば  - 07/11/4(日) 19:36 -

引用なし
パスワード
   かみちゃんさん

 重ね重ねありがとうございます。
もう、本当に完璧です。
これで明日から1時間は早く仕事を終わらせて帰宅することが出来ます。
感謝いたします。

5173 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free