Excel VBA質問箱 IV

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

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


9804 / 76734 ←次へ | 前へ→

【72487】Re:sheet1のデータをsheet2に整形して抽出する方法
回答  タケル  - 12/8/15(水) 22:17 -

引用なし
パスワード
   ▼UO3 さん:
返信ありがとうございます。

>アップされたサンプルデータも、まだ見ていませんし、コードも、ざらっと眺めただけですが、
>ループ構文の書き方としては、大いに改善すべき点はあるとして、

申し訳ありません。問題点が多くあることはわかってはいますが、
自分なりにやった結果、これ以上の改善方法がわからなかったので、
そちらも助言を頂けると嬉しいです。


>まず、ほんとうに『型が違います』というエラーでしたか?
>1004 で、『不適切です』といったエラーではなかったですか?
>
>>Sheets(1).Range(Cells(i, "D"), Cells(i + Y - 1, "D")).Copy Sheets(2).Range(Cells(m, 4), Cells(m, 4 + Y))←「型が違います」と表示され処理ができない.
>これはSheets(1)のD列の『縦』の領域を、Sheets(2)のD○から右の『横』の領域にコピペしようとしていますね。

やりたい処理は、おっしゃる通りです。
確かに「型が一致しません」というエラーでした。
ただ、行列入れ替えを試してみましたので、新しいコードを記載させていただきます。

>それと、なぜ
>Application.DisplayAlerts = False
>が、あるのでしょう?
>ざっと見る限り、これが必要なコード実行は見あたりませんが?

申し訳ありません。上記のコードは不要でしたので、
消去しました。

また、コードを張らせていただきますので、
改善点がございましたら、お手数ですがご返信を頂けると幸いです。

--------------------------------------------------------------------------
Sub コピペ()

i = 2
j = 2

m = 2
n = 3
o = 4
p = 5
q = 6
r = 7

p01:
If Cells(i, "A") = "" Then
   Sheets(1).Cells(i + 1, "A").Copy Sheets(2).Cells(j, "A")
   Sheets(2).Range(Cells(j, "A"), Cells(j + 5, "A")).MergeCells = True 'アプリケーション定義またはオブジェクト定義のエラー(上手く行く時もある)
  
   Sheets(1).Cells(i + 1, "B").Copy Sheets(2).Cells(j, "B")
   Sheets(2).Range(Cells(j, "B"), Cells(j + 5, "B")).MergeCells = True

   Sheets(1).Cells(i + 1, "J").Copy Sheets(2).Cells(j + 1, "V")
   Sheets(1).Cells(i + 1, "K").Copy Sheets(2).Cells(j + 3, "V")
   Sheets(1).Cells(i + 2, "K").Copy Sheets(2).Cells(j + 4, "V")
   Sheets(1).Cells(i + 3, "K").Copy Sheets(2).Cells(j + 5, "V")
     
   j = j + 6

   Y = Cells(i + 1, "B").Value
  
   Sheets(1).Range(Cells(i + 1, "D"), Cells(i + Y, "D")).Select
   Selection.Copy
   Sheets(2).Select
   Range(Cells(m, 4), Cells(m, 4 + Y)).Select
   Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=True
   m = m + 6
  
   Sheets(1).Range(Cells(i + 1, "E"), Cells(i + Y, "E")).Select 'アプリケーション定義またはオブジェクト定義のエラーが発生
   Selection.Copy
   Sheets(2).Select
   Range(Cells(n, 4), Cells(n, 4 + Y)).Select
   Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=True
   n = n + 6
  
   Sheets(1).Range(Cells(i + 1, "F"), Cells(i + Y, "F")).Select
   Selection.Copy
   Sheets(2).Select
   Range(Cells(o, 4), Cells(o, 4 + Y)).Select
   Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=True
   o = o + 6
  
   Sheets(1).Range(Cells(i + 1, "G"), Cells(i + Y, "G")).Select
   Selection.Copy
   Sheets(2).Select
   Range(Cells(p, 4), Cells(p, 4 + Y)).Select
   Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=True
   p = p + 6
  
   Sheets(1).Range(Cells(i + 1, "H"), Cells(i + Y, "H")).Select
   Selection.Copy
   Sheets(2).Select
   Range(Cells(q, 4), Cells(q, 4 + Y)).Select
   Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=True
   q = q + 6
  
   Sheets(1).Range(Cells(i + 1, "I"), Cells(i + Y, "I")).Select
   Selection.Copy
   Sheets(2).Select
   Range(Cells(r, 4), Cells(r, 4 + Y)).Select
   Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=True
   r = r + 6
  
Else
End If
i = i + 1
GoTo p01
End Sub

3 hits

【72481】sheet1のデータをsheet2に整形して抽出する方法 タケル 12/8/15(水) 14:45 質問
【72484】Re:sheet1のデータをsheet2に整形して抽出... UO3 12/8/15(水) 19:54 発言
【72487】Re:sheet1のデータをsheet2に整形して抽出... タケル 12/8/15(水) 22:17 回答
【72488】Re:sheet1のデータをsheet2に整形して抽出... タケル 12/8/15(水) 22:36 お礼
【72496】Re:sheet1のデータをsheet2に整形して抽出... kanabun 12/8/16(木) 9:28 発言
【72501】Re:sheet1のデータをsheet2に整形して抽出... UO3 12/8/16(木) 15:57 発言
【72490】Re:sheet1のデータをsheet2に整形して抽出... UO3 12/8/15(水) 22:40 発言

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