Excel VBA質問箱 IV

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

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


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

【72434】並べ替えについて マリモ 12/8/9(木) 17:46 質問[未読]
【72435】Re:並べ替えについて kanabun 12/8/9(木) 20:29 発言[未読]
【72440】Re:並べ替えについて マリモ 12/8/10(金) 9:33 お礼[未読]
【72442】Re:並べ替えについて kanabun 12/8/10(金) 9:43 発言[未読]
【72443】Re:並べ替えについて マリモ 12/8/10(金) 10:26 お礼[未読]
【72436】Re:並べ替えについて UO3 12/8/9(木) 20:33 発言[未読]
【72441】Re:並べ替えについて マリモ 12/8/10(金) 9:37 お礼[未読]

【72434】並べ替えについて
質問  マリモ  - 12/8/9(木) 17:46 -

引用なし
パスワード
   こんにちは。
早速ですが、質問させていただきます。

セルで全て区切られていまして
,でその区切りを表します。

町名,産業,事業所
たこ町,7,3
かに町,5,2
いか町,6,4

となっていたら

ID,町名,産業
1,たこ町,7
2,たこ町,7
3,たこ町,7
4,かに町,5
5,かに町,5
6,いか町,6
7,いか町,6
8,いか町,6
9,いか町,6

IDは連番でA列に
B列は事業所の数分だけ町名を繰り返します。
c列は事業所の数分だけ産業の数を繰り返します。

ご存知の方、見えましたら、
どうか、ご教授ください。

【72435】Re:並べ替えについて
発言  kanabun  - 12/8/9(木) 20:29 -

引用なし
パスワード
   ▼マリモ さん:
>こんにちは。

>セルで全て区切られていまして
>,でその区切りを表します。
>
>町名,産業,事業所
>たこ町,7,3
>かに町,5,2
>いか町,6,4
>
>となっていたら

そのようなファイルがどこぞのフォルダにあるとして、
それをマクロで Open し、所定の構成に組み替えて出力
するサンプルです。

Sub try1()
  Dim myCSV As String
  
  myCSV = Application.GetOpenFilename("CSV,*.csv,テキスト,*.csv;*.txt")
  If myCSV = "False" Then Exit Sub
  
  Dim ss As String
  Dim io%, oo%, m%, n% '%のつく変数は整数変数です
  Dim i&, ID&      '&のつく長整数型変数です
  io = FreeFile()
  Open myCSV For Input As io
  oo = FreeFile()
  Open Replace(myCSV, ".", "$.") For Output As oo
  
  Line Input #io, ss
  Print #oo, "ID,町名,産業"
  Do Until EOF(io)
    Input #io, ss, m, n
    For i = 1 To n
      ID = ID + 1
      Print #oo, ID & "," & ss & "," & m
    Next
  Loop
  Close io, oo
End Sub

Excelシートは使っていません。
確認したいときは、出力後のファイルを普通に開いて
ください。

【72436】Re:並べ替えについて
発言  UO3  - 12/8/9(木) 20:33 -

引用なし
パスワード
   ▼マリモ さん:

元シートを上書きしますので、実行前にシートの内容は別シートにコピーしておかれたほうが
よろしいかと。
結果を別シートに転記することも、もちろんできますよ。

Sub Sample()
  Dim n As Long
  Dim v() As Variant
  Dim c As Range
  Dim x As Long
  Dim k As Long
  Dim i As Long
  
  With Sheets("Sheet1")  '元のシート
    n = WorksheetFunction.Sum(.Columns("C"))  '展開必要行数(事業所数合計)
    ReDim v(1 To n, 1 To 2)           '展開用配列初期化
    For Each c In .Range("A2", .Range("A" & .Rows.Count).End(xlUp))
      x = c.Offset(, 2).Value       '事業所の数
      For k = 1 To x
        i = i + 1
        v(i, 1) = c.Value        '町名
        v(i, 2) = c.Offset(, 1).Value  '産業の数
      Next
    Next
    .Cells.ClearContents
    .Range("A1:C1").Value = Array("ID", "町名", "産業") 'あたらしいタイトル行
    .Range("B2").Resize(UBound(v, 1), UBound(v, 2)).Value = v
    .Range("A2").Value = 1
    .Range("B2", .Range("B" & Rows.Count).End(xlUp)).Offset(, -1).DataSeries
  End With
End Sub

【72440】Re:並べ替えについて
お礼  マリモ  - 12/8/10(金) 9:33 -

引用なし
パスワード
   ▼kanabun さん:

おはようございます。
ありがとうございます。
私は初心者で難しいことは分からないのですみません。
エクセルを選択できるように増やしてみました。
("CSV,*.csv,テキスト,*.csv;*.txt,xls,*.xls")
としてみました。
ファイルが開きましたが、その後、どうすればいいのか
分かりませんでした。

でも、したかった動作はできるようになりましたので
ありがとうございました。

【72441】Re:並べ替えについて
お礼  マリモ  - 12/8/10(金) 9:37 -

引用なし
パスワード
   ▼UO3 さん:

おはようございます。
思っていた通りの動作が確認できました。
ありがとうございました。
先回に引き続き、今回もお世話になりました。

【72442】Re:並べ替えについて
発言  kanabun  - 12/8/10(金) 9:43 -

引用なし
パスワード
   ▼マリモ さん:
>▼kanabun さん:
>
>おはようございます。
>ありがとうございます。
>私は初心者で難しいことは分からないのですみません。
>エクセルを選択できるように増やしてみました。
>("CSV,*.csv,テキスト,*.csv;*.txt,xls,*.xls")
>としてみました。
>ファイルが開きましたが、その後、どうすればいいのか
>分かりませんでした。

ああー、ごめんなさーい

> セルで全て区切られていまして
> ,でその区切りを表します。

カンマ(,)は 掲示板上で示すときの仮の区切り記号だった
んですね そそっかしくてすみませんでした m(_ _)m

【72443】Re:並べ替えについて
お礼  マリモ  - 12/8/10(金) 10:26 -

引用なし
パスワード
   ▼kanabun さん:

いえいえ、紛らわしい表現ですみませんでした。
そのまま書くと、ずれてしまったり
セルがあることが分かりにくいかなと思いまして。

ありがとうございました。

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