Excel VBA質問箱 IV

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

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


52483 / 76732 ←次へ | 前へ→

【29087】Re:データの埋め込み
発言  ichinose  - 05/9/23(金) 18:40 -

引用なし
パスワード
   ▼M さん:
こんばんは。

>
>基準になる表が必要な事が良く分かりました。
>それを別シートに作成して活用する事ですね。汎用性があって今後また
>他のところにも、使わせていただきます。
>素晴らしいマクロに、ちょっとついていけないのが事実です。
素晴らしいか否かはともかく、M さんが投稿されたコードと比較して
私が投稿したコードのアルゴリズムは単純です。
M さんのやろうとしている事は
かなりややこしいんですよ!!


これは、

>>Sub 表の補完作成1()
>
>Dim i As Integer
>
For i = Cells(65536, 2).End(xlUp).Row to 5 step -1
>
>If Cells(i, 1) = "102" Then
>Cells(i, 1).Offset(1).Select
>
>If Selection.Value <> "103" Then
>Range(Selection, Selection.Offset(, 5)).Select
>  Selection.Insert shift:=xlDown
>ActiveCell.Value = "103"
>ActiveCell.Offset(, 1).Value = "PPP"
>ActiveCell.Offset(, 2).Value = "0"
>ActiveCell.Offset(, 3).Value = "0"
>ActiveCell.Offset(, 4).Value = "0"
>ActiveCell.Offset(, 5).Value = "0"
>End If
>End If
>
>If Cells(i, 1) = "104" Then
>Cells(i, 1).Offset(1).Select
>
>If Selection.Value <> "105" Then
>Range(Selection, Selection.Offset(, 5)).Select
>  Selection.Insert shift:=xlDown
>ActiveCell.Value = "105"
>ActiveCell.Offset(, 1).Value = "EEE"
>ActiveCell.Offset(, 2).Value = "0"
>ActiveCell.Offset(, 3).Value = "0"
>ActiveCell.Offset(, 4).Value = "0"
>ActiveCell.Offset(, 5).Value = "0"
>End If
>End If
>
>If Cells(i, 1) = "107" Then
>Cells(i, 1).Offset(1).Select
>
>If Selection.Value <> "108" Then
>Range(Selection, Selection.Offset(, 5)).Select
>  Selection.Insert shift:=xlDown
>ActiveCell.Value = "108"
>ActiveCell.Offset(, 1).Value = "GGG"
>ActiveCell.Offset(, 2).Value = "0"
>ActiveCell.Offset(, 3).Value = "0"
>ActiveCell.Offset(, 4).Value = "0"
>ActiveCell.Offset(, 5).Value = "0"
>
>End If
>End If
>
>Next
>End Sub

とすれば、動作すると思いますが、
これだと汎用性はないですよね?

これを私はこういうアルゴリズムで作成する事はないですが、

'=============================================================
Sub 表の補完作成1()
  Dim i As Long
  Dim chkarray1 As Variant
  Dim chkarray2 As Variant
  Dim jdx As Long
  chkarray1 = Array(101, 102, 103, 104, 105, 107, 108, 109)
  chkarray2 = Array("AAA", "BBB", "PPP", "DDD", "EEE", "FFF", "GGG", "HHH")
  jdx = UBound(chkarray1)
  i = Cells(65536, 1).End(xlUp).Row
  Do Until jdx < 0
   With Cells(i, 1)
     If .Value <> chkarray1(jdx) Then
      .Offset(1).EntireRow.Insert shift:=xlDown
      .Offset(1, 0).Value = chkarray1(jdx)
      .Offset(1, 1).Value = chkarray2(jdx)
      .Offset(1, 2).Resize(, 4).Value = 0
     Else
      If i >= 5 Then i = i - 1
      End If
     End With
   jdx = jdx - 1
   Loop
End Sub

これで確認してみて下さい。
アルゴリズムは、こっちの方がややこしいですよ!!

1 hits

【29022】データの埋め込み M 05/9/21(水) 20:57 質問
【29036】Re:データの埋め込み M 05/9/22(木) 7:11 質問
【29038】Re:データの埋め込み ichinose 05/9/22(木) 8:29 発言
【29063】Re:データの埋め込み M 05/9/22(木) 21:25 質問
【29064】Re:データの埋め込み ichinose 05/9/22(木) 22:39 発言
【29083】Re:データの埋め込み M 05/9/23(金) 16:31 お礼
【29087】Re:データの埋め込み ichinose 05/9/23(金) 18:40 発言
【29095】Re:データの埋め込み M 05/9/23(金) 21:59 お礼

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