Excel VBA質問箱 IV

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

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


1775 / 13645 ツリー ←次へ | 前へ→

【71997】品名と数量を読み取って連続記入 まくら 12/5/15(火) 15:32 質問[未読]
【71998】Re:品名と数量を読み取って連続記入 毛虫(通過中) 12/5/15(火) 16:25 発言[未読]
【71999】Re:品名と数量を読み取って連続記入 まくら 12/5/15(火) 18:44 お礼[未読]
【72003】Re:品名と数量を読み取って連続記入 毛虫(通過中) 12/5/16(水) 9:11 発言[未読]
【72017】Re:品名と数量を読み取って連続記入 毛虫(通過中) 12/5/16(水) 16:27 発言[未読]

【71997】品名と数量を読み取って連続記入
質問  まくら  - 12/5/15(火) 15:32 -

引用なし
パスワード
   はじめまして。
初心者ですのでよろしくお願い致します。
VBAで処理したいと思っているのですが、イメージとしては
シート1に記入してある品名と数量を読み取ってシート2に連続記入する方法が
知りたいです。御教示願います。

(シート1)
     A列   B列
     (品名) (数量)
1    りんご   3
2    みかん   1
3    すいか   3
4    ばなな   2
5    さかな   1



これを

(シート2)
     A列
1    りんご
2    りんご
3    りんご
4    みかん
5    すいか
6    すいか
7    すいか
8    ばなな
9    ばなな
10    さかな




【71998】Re:品名と数量を読み取って連続記入
発言  毛虫(通過中)  - 12/5/15(火) 16:25 -

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

なんだか美しくないコードですが、参考程度で宜しければ。
意味を履き違えていたらすみません。

Sub まくら()
Dim myStr As String
Dim i As Long, n As Long, lastRow1 As Long, lastRow2 As Long

  With ThisWorkbook.Worksheets("Sheet1")
    lastRow1 = .Range("A" & Rows.Count).End(xlUp).Row
    For i = 1 To lastRow1
      myStr = .Range("A" & i).Value
      n = .Range("B" & i).Value
      
      With ThisWorkbook.Worksheets("Sheet2")
        lastRow2 = .Range("A" & Rows.Count).End(xlUp).Offset(1).Row
       
        If .Range("A1").Value = "" Then
          .Range("A1", "A" & n).Value = myStr
        Else
          .Range("A" & lastRow2).Resize(n, 1).Value = myStr
        End If
      End With
    Next i
  End With
End Sub

【71999】Re:品名と数量を読み取って連続記入
お礼  まくら  - 12/5/15(火) 18:44 -

引用なし
パスワード
   ▼毛虫さん

早速のご回答ありがとうございました。
イメージ通りです。
あと、数量がたまに「0」であると

  .Range("A" & lastRow2).Resize(n, 1).Value = myStr

の行でひっかかってしまいます(汗)
ひとまずは0を削除して操作してみたいと思います。
毛虫さんのようにスラスラとコードが書けるように勉強したいと思います。
ありがとうございました。

【72003】Re:品名と数量を読み取って連続記入
発言  毛虫(通過中)  - 12/5/16(水) 9:11 -

引用なし
パスワード
   ▼まくら さん:
例えば「みかん 0」の場合はみかんを追加しないということであれば下記で試してみてください。

Sub まくら2()
Dim myStr As String
Dim i As Long, n As Long, lastRow1 As Long, lastRow2 As Long

  With ThisWorkbook.Worksheets(3)
    lastRow1 = .Range("A" & Rows.Count).End(xlUp).Row
    For i = 1 To lastRow1
      myStr = .Range("A" & i).Value
      n = .Range("B" & i).Value
      
      If n <> 0 Then '=====追加
        With ThisWorkbook.Worksheets(4)
        lastRow2 = .Range("A" & Rows.Count).End(xlUp).Offset(1).Row
       
          If .Range("A1").Value = "" Then
            .Range("A1", "A" & n).Value = myStr
          Else
            .Range("A" & lastRow2).Resize(n, 1).Value = myStr
         End If
        End With
      End If '=====追加
    Next i
  End With
End Sub

【72017】Re:品名と数量を読み取って連続記入
発言  毛虫(通過中)  - 12/5/16(水) 16:27 -

引用なし
パスワード
   >▼まくら さん:
テストしたものをそのまま掲載してしまったのでWorksheetsの指定が間違っていました。
もう見ていらっしゃらないかもですが、個人的に気持ち悪いので修正。

Sub まくら2_修正()
Dim myStr As String
Dim i As Long, n As Long, lastRow1 As Long, lastRow2 As Long

  With ThisWorkbook.Worksheets("Sheet1")'=====←
    lastRow1 = .Range("A" & Rows.Count).End(xlUp).Row
    For i = 1 To lastRow1
      myStr = .Range("A" & i).Value
      n = .Range("B" & i).Value
      
      If n <> 0 Then '=====追加
        With ThisWorkbook.Worksheets("Sheet2")'=====←
        lastRow2 = .Range("A" & Rows.Count).End(xlUp).Offset(1).Row
       
          If .Range("A1").Value = "" Then
            .Range("A1", "A" & n).Value = myStr
          Else
            .Range("A" & lastRow2).Resize(n, 1).Value = myStr
         End If
        End With
      End If '=====追加
    Next i
  End With
End Sub

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