Excel VBA質問箱 IV

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

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


10306 / 13646 ツリー ←次へ | 前へ→

【22599】データの表示形式を変更したい。 yuki 05/2/24(木) 17:27 質問[未読]
【22603】Re:データの表示形式を変更したい。 ponpon 05/2/24(木) 18:36 発言[未読]
【22605】Re:データの表示形式を変更したい。 kazu 05/2/24(木) 18:39 発言[未読]
【22607】Re:データの表示形式を変更したい。 G-Luck 05/2/24(木) 19:04 回答[未読]

【22599】データの表示形式を変更したい。
質問  yuki  - 05/2/24(木) 17:27 -

引用なし
パスワード
   果たしてこのトピックスに、書き込む内容なのか
分からないのですが、
困り果ててしまい、皆様に教えていただきたいです。


元データが
(開始から、終了までは0000番から9999番までなどという続きデータ)

番号 千番台開始 千番台終了 機種

12345  0000   9999    YYY
12346 0925 1687    XX-A
12346 1796 2377    XX-B
12346 2689 3605    XX-C
12346 3779 4044    XX-D
12346 4888 5223    XX-E
12346 5551 6345    XX-F
12346 6694 7253    XX-G
12346 7783 8522    XX-H
12346 8925 9360    XX-I
12347 0000 7999    ZZ
12348 1000 2999    AA


変換?後にしたいデータが

番号  千番台  機種
12345  0    YYY
12345  1    YYY
12345  2    YYY
12345  3    YYY
12345  4    YYY
12345  5    YYY
12345  6    YYY
12345  7    YYY
12345  8    YYY
12345  9    YYY
12346  0    XX-A
12346  1    XX-A
12346  1    XX-B
12346  2    XX-B
12346  2    XX-C
12346  3    XX-C
12346  3    XX-D
12346  4    XX-D
12346  4    XX-E
12346  5    XX-E
12346  5    XX-F
12346  6    XX-F
12346  6    XX-G
12346  7    XX-G
12346  7    XX-H
12346  8    XX-H
12346  8    XX-I    
12346  9    XX-I
12347 0    ZZ
12347 1    ZZ
12347 2    ZZ
12347 3    ZZ
12347 4    ZZ
12347 5    ZZ
12347 6    ZZ
12347 7    ZZ
12348 1    AA
12348 2    AA

というデータを作りたいのですが、
作り方をどなたか教えてください。

【22603】Re:データの表示形式を変更したい。
発言  ponpon  - 05/2/24(木) 18:36 -

引用なし
パスワード
   ponponです。こんばんは。

いまいち、内容がわかりませんが、
    千番台開始?千番台終了?
         ↑
    これが変換?後にしたいデータの千番台のどこになるのか?      
                
千番台の1,2,…の数字が必要なら別ですが、

オートフィルターでできませんか?
間違っていたらごめんなさい。

【22605】Re:データの表示形式を変更したい。
発言  kazu  - 05/2/24(木) 18:39 -

引用なし
パスワード
   yuki さん

こんばんは。
マクロでやっていいなら・・・↓ので可能かと思いますが、いががでしょうか?

SHEET1に記入されているデータを元に
SHEET2に変換結果を出力します。


Sub Chg_Txt()
Dim Cel As Range
Dim i As Long, j As Long

  Set Cel = Sheets("SHEET2").Cells(1, 1)
  For i = 1 To Sheets("SHEET1").Cells(65000, 1).End(xlUp).Row
    For j = CInt(Left(Sheets("SHEET1").Cells(i, 2), 1)) To CInt(Left(Sheets("SHEET1").Cells(i, 3), 1))
      With Cel
        .Value = Sheets("SHEET1").Cells(i, 1)
        .Offset(0, 1).Value = j
        .Offset(0, 2).Value = Sheets("SHEET1").Cells(i, 4)
      End With
      Set Cel = Cel.Offset(1, 0)
    Next
  Next
  Set Cel = Nothing
End Sub

【22607】Re:データの表示形式を変更したい。
回答  G-Luck  - 05/2/24(木) 19:04 -

引用なし
パスワード
   >yuki さん
G-Luckといいます。
せっかく書いたのでの載せさせてね。

標準モジュールにコピーして、DataTENKAIのところにカーソルを持っていって、F5を押してください。

条件
元データは、Sheet1のA2を最初のデータとして存在する。
データは、詰まって存在する。
Sheet2が存在し、何も入力されていない。

kazuさんと同じように、データはSheet2に出力する。
出力前に、Sheet2はオールクリアしているので、他のデータも削除されてしまいます。

不明な点がありましたら、お知らせください。

'以下コード
Option Explicit

Private Sub DataTENKAI()
  '
  Dim rg         As Range
  Dim rgIn        As Range
  Dim rgOut        As Range
  Dim buf(1 To 1, 1 To 3) As Variant
  Dim i As Long
  Dim j As Long
  Dim n As Long
  Dim Lm As Long
  Dim Um As Long
  
  n = DataCount
  
  If n < 1 Then Exit Sub
  
  ThisWorkbook.Worksheets("Sheet2").Cells.Clear
  Set rg = ThisWorkbook.Worksheets("sheet2").Range("A1:C1")
    rg.Cells(1) = "番号"
    rg.Cells(2) = "千番台"
    rg.Cells(3) = "機種"
  
  Set rgIn = ThisWorkbook.Worksheets("Sheet1").Range("A2:D2")
  Set rgOut = ThisWorkbook.Worksheets("Sheet2").Range("A2:C2")
  
  For i = 1 To n
    Lm = Int(rgIn.Cells(2) / 1000)
    Um = Int(rgIn.Cells(3) / 1000)
    For j = Lm To Um
      buf(1, 1) = rgIn.Cells(1)
      buf(1, 2) = j
      buf(1, 3) = rgIn.Cells(4)
      rgOut = buf
      Set rgOut = rgOut.Offset(1, 0)
    Next j
    Set rgIn = rgIn.Offset(1, 0)
  Next i
End Sub

Private Function DataCount() As Long
  '元データー数
  
  Dim n As Long
  
  With ThisWorkbook.Worksheets("Sheet1")
    If .Range("A2").Value = "" Then
      n = 0
    Else
      n = .Range("A1").End(xlDown).Row - .Range("A1").Row
    End If
  End With
  
  DataCount = n
End Function

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