Excel VBA質問箱 IV

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

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


6436 / 76734 ←次へ | 前へ→

【75899】Re:このコードを簡単にしたいです。
発言  kanabun  - 14/7/31(木) 13:22 -

引用なし
パスワード
   ▼なまけもの さん:


>以下のコードを作ったのですが、
>もっと簡単にすることは可能なのでしょうか?

配列内で転記してみますか?
専用下請けサブプロシージャを2つ作っておきます。
1つは trans2 で 転記元2列 → 転記先1列
もうひとつは
   trans1 で 転記元1列(連続データ)→転記先(1行おき)

呼び出すとき、各範囲の先頭セルと 転記元側の行数を渡してやります。

Sub 部品外注抽出()
 Const m = 18 '元範囲行数
 
 '部品の品名 + 部品の型式またはサイズ (1ページ目)
  trans2 [B56], [C56], m, [AP11]

  ' 部品の数量(1ページ目)
  trans1 [G56], m, [AR11]

  '部品の 単価 (1ページ目)
  trans1 [D56], m, [AT11]
  
 '外注の品名 + 型式またはサイズ (1ページ目)
  trans2 [J56], [P56], m, [BB11]

  ' 外注の数量 (1ページ目)
  trans1 [W56], m, [BD11]

  '外注の 単価 (1ページ目)
  trans1 [U56], m, [BE11]
  
  
 '部品の品名 + 部品の型式またはサイズ (1ページ目)
  trans2 [B74], [C74], m, [AP53]

  ' 部品の数量(1ページ目)
  trans1 [G74], m, [AR53]

  '部品の 単価 (1ページ目)
  trans1 [J74], m, [BB53]
  
End Sub

Private Sub trans2(c1 As Range, c2 As Range, m As Long, r As Range)
  Dim a, b
  Dim v
  Dim i As Long, j As Long, n As Long: n = m + m
  
  a = c1.Resize(m).Value
  b = c2.Resize(m).Value
  v = r.Resize(n).Value
  For i = 1 To n Step 2
    j = j + 1
    v(i, 1) = a(j, 1)
    v(i + 1, 1) = b(j, 1)
  Next
  r.Resize(n).Value = v
End Sub

Private Sub trans1(c1 As Range, m As Long, r As Range)
  Dim a
  Dim v
  Dim i As Long, j As Long, n As Long: n = m + m
  
  a = c1.Resize(m).Value
  v = r.Resize(n).Value
  For i = 1 To n Step 2
    j = j + 1
    v(i, 1) = a(j, 1)
  Next
  r.Resize(n).Value = v
End Sub

5 hits

【75896】このコードを簡単にしたいです。 なまけもの 14/7/31(木) 11:29 質問
【75899】Re:このコードを簡単にしたいです。 kanabun 14/7/31(木) 13:22 発言
【75900】Re:このコードを簡単にしたいです。 kanabun 14/7/31(木) 13:26 発言
【75901】Re:このコードを簡単にしたいです。 なまけもの 14/7/31(木) 16:38 お礼

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