Excel VBA質問箱 IV

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

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


4743 / 13644 ツリー ←次へ | 前へ→

【54744】教えてください あさの 08/3/28(金) 11:33 質問[未読]
【54745】Re:教えてください ひげくま 08/3/28(金) 11:45 発言[未読]
【54752】Re:教えてください あさの 08/3/28(金) 13:29 発言[未読]
【54757】Re:教えてください ひげくま 08/3/28(金) 14:09 発言[未読]
【54762】Re:教えてください あさの 08/3/28(金) 15:42 お礼[未読]
【54754】Re:教えてください 注意 08/3/28(金) 13:38 発言[未読]
【54758】Re:教えてください VBWASURETA 08/3/28(金) 14:10 発言[未読]
【54761】Re:教えてください VBWASURETA 08/3/28(金) 15:27 発言[未読]
【54763】Re:教えてください あさの 08/3/28(金) 15:43 発言[未読]
【54764】Re:教えてください VBWASURETA 08/3/28(金) 15:50 発言[未読]

【54744】教えてください
質問  あさの  - 08/3/28(金) 11:33 -

引用なし
パスワード
   テキストを読んでもネットで探してもうまく設定できず、質問させて頂きます。

一人1行100名分のデータシート「シート1」があります。
A列に個人番号、H列からAF列まで25個のデータが入力されています。
それを、「シート2」のI8からM12の範囲に折り返して貼り付けたいのです。

シート2は、一人分のシートが完成するたびに印刷、削除、次の人のシート作成・・・というマクロを組んでいますので、「シート1」のデータは(H1:AF1)と行数を指定するのではなく、行数は変数「ichirangyo」を使用する形で作成したいと考えています。

自分で調べて「for...next」を使ってコピーをしてみましたが、行展開が上手く出来ず、1行目しかコピーされませんでした。

よろしくお願いします。

【54745】Re:教えてください
発言  ひげくま  - 08/3/28(金) 11:45 -

引用なし
パスワード
   ▼あさの さん:
>自分で調べて「for...next」を使ってコピーをしてみましたが、行展開が上手く出来ず、1行目しかコピーされませんでした。

それを提示してください。

【54752】Re:教えてください
発言  あさの  - 08/3/28(金) 13:29 -

引用なし
パスワード
   ▼くまひげさん

レスポンスありがとうございます。
上手くいかなかった構文は削除してしまったので、もう一度やり直してみました。
すると、違った形で結果が出るようになってしまったので、新しい構文の方で別の内容のご指導をお願いします。

=======================================================================
  Dim meisai As Integer
  Dim CopyPos As Integer
  Dim PastPos As Integer

  meisai = 25             'データ数
  PastPos = 8             '貼り付け開始行は8行目
 
  For CopyPos = 8 To 32 Step 5
    
    'セルを2つコピーします。
    Sheets("シート1").Select
    Range(Cells(ichirangyo, CopyPos), Cells(ichirangyo, CopyPos + 1)).Select
    Selection.Copy
    
    'コピーしたデータを貼り付けます。
    Sheets("シート2").Select
    Cells(PastPos, 9).Select
    Selection.PasteSpecial
    
    'セルを2つコピーします。
    Sheets("シート1").Select
    Range(Cells(ichirangyo, CopyPos + 2), Cells(ichirangyo, CopyPos + 3)).Select
    Selection.Copy
    
    'コピーしたデータを貼り付けます。
    Sheets("シート2").Select
    Cells(PastPos, 11).Select
    Selection.PasteSpecial
  
    'セルを1つコピーします。
    Sheets("シート1").Select
   ■Range(Cells(ichirangyo, CopyPos + 4)).Select
    Selection.Copy
    
    'コピーしたデータを貼り付けます。
    Sheets("シート2").Select
    Cells(PastPos, 13).Select
    Selection.PasteSpecial
    
    '貼り付け先の列をカウントします。
    PastPos = PastPos + 1
  
  Next CopyPos
=======================================================================
【質問1】
■の部分でエラーとなってしまいました。1つのセルの時には使えないのでしょうか?

【質問2】
出来れば値だけをコピーしたいのですが、どこを修正したらよろしいでしょうか?

【質問3】
もっとシンプルに出来る構文があれば、教えていただけますか?

【54754】Re:教えてください
発言  注意  - 08/3/28(金) 13:38 -

引用なし
パスワード
   質問者の方へのお願い

タイトルは内容を示すものに
記事のタイトルは、その質問の内容が端的にわかるようなものにしてください。
単に「教えてください」とか「困っています」などといったタイトルでは、回答者があなたの質問をクリックしない可能性が非常に高くなります。すなわち、回答がつかない可能性が高くなる、ということです。

【54757】Re:教えてください
発言  ひげくま  - 08/3/28(金) 14:09 -

引用なし
パスワード
   > 【質問1】
> ■の部分でエラーとなってしまいました。1つのセルの時には使えないのでしょうか?

1つのときは、Cells(ichirangyo, CopyPos + 4).Select だけで良いです。

> 【質問2】
> 出来れば値だけをコピーしたいのですが、どこを修正したらよろしいでしょうか?

マクロではなく、手作業でそれをしたいときは、どうしますか?

> 【質問3】
> もっとシンプルに出来る構文があれば、教えていただけますか?

たぶん、Range(Cells(r1, c1), Cells(r2, c2)) という書き方は、隣り合った2つまで、という認識なんでしょうけど、それは間違っていますよ。
Range(Cells(1, 1), Cells(5, 10)) というように、範囲の大きさを変えられます。

あと、Forループですが、2周目のCopyPosの値は、狙った値になっていますか?

とりあえず、このヒントだけで、修正してみてください。

【54758】Re:教えてください
発言  VBWASURETA  - 08/3/28(金) 14:10 -

引用なし
パスワード
   こんにちは。

>タイトルは内容を示すものに
>記事のタイトルは、その質問の内容が端的にわかるようなものにしてください。
>単に「教えてください」とか「困っています」などといったタイトルでは、回答者があなたの質問をクリックしない可能性が非常に高くなります。すなわち、回答がつかない可能性が高くなる、ということです。

確かにそうですね。
そいうタイトルの場合、内容がおおざっぱにしか書いていないことが
あるんですよね。

因みにFor Nextの書き方ヒントだけ書きます。
以下の感じです。

αCnt = 0
For α= 開始列 To 最大列 '元のシートA
  For β = 0 to 4 '5列で次行するシートB
   Sheets("B").Cells(行 + αCnt, 列 + β) = Sheets("A").Cells(行, α)
  Next
  αCnt = αCnt + 1
Next

【54761】Re:教えてください
発言  VBWASURETA  - 08/3/28(金) 15:27 -

引用なし
パスワード
   すみません。
For Next例訂正です。

αCnt = 0
For α= 開始列 To 最大列 '元のシートA
  For β = 0 to 4 '5列で次行するシートB
   Sheets("B").Cells(行 + αCnt, 列 + β) = Sheets("A").Cells(行, α)
   α = α + 1
  Next
  αCnt = αCnt + 1
Next

【54762】Re:教えてください
お礼  あさの  - 08/3/28(金) 15:42 -

引用なし
パスワード
   ▼ひげくま さん:

どうもありがとうございました。
教えていただいたヒントを元に試行錯誤した結果、
無事、希望通りのマクロを組むことが出来ました。

解決した方法を記載しておきます。

>マクロではなく、手作業でそれをしたいときは、どうしますか?

Selection.PasteSpecial Paste:=xlPasteValues
検索した結果、値コピーは上記の構文で解決しました。

>Range(Cells(1, 1), Cells(5, 10)) というように、範囲の大きさを変えられます。

Range(Cells(ichirangyo, CopyPos), Cells(ichirangyo, CopyPos + 4)).Select
お蔭様で1度のコピー&ペーストで済ませることが出来ました。

>あと、Forループですが、2周目のCopyPosの値は、狙った値になっていますか?

狙った値になっています。
そこは大丈夫でした。

短時間でレスポンスを頂けたので、非常に助かりました。
また、次回以降はタイトルに質問内容を書くようにいたします。
その前に出来るだけ自分で解決できるよう、努力します。

この度は丁寧にご教示いただき、本当にありがとうございました。

【54763】Re:教えてください
発言  あさの  - 08/3/28(金) 15:43 -

引用なし
パスワード
   ご注意いただき、どうもありがとうございます。
上手く質問を要約できず、このようなタイトルにしてしまいました。
以降気をつけます。

【54764】Re:教えてください
発言  VBWASURETA  - 08/3/28(金) 15:50 -

引用なし
パスワード
   ▼あさの さん:
タイトルをつけるなら、
「1行範囲のシートデータを別シートで複数行に分割コピーするには?」

というようなのでも良いかと。

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