VBA書かなくなって随分立つけれどまだ覚えてるかなぁ。
やり始めたきっかけを思い出すのはなかなか楽しいです。
そんなところでお見かけしたこちらの記事。
あるExcelから他のブックに移動したいことはよくあります。
んで
よーく考えると大抵の場合でデータベース化したいってことがほとんどなんですよね。
Excelだといちいちbook開くの面倒。別に書き込み先は外でもいいじゃん。
ということで、Access>今のmysqlと流れていくわけです。
やりたいことを考えるとテキストを間に挟めるとむしろ楽なことがあるというお話。
しっかり真似をさせて頂いて。入力画面をこんなかんじ
Excelのバージョンは気にしちゃだめです
つづいてソース
Sub writeTxt() Dim FSO As New Scripting.FileSystemObject Dim col As New Collection Dim PATH As String Dim SH As Worksheet PATH = ThisWorkbook.PATH & "\db.txt" Set SH = ThisWorkbook.Worksheets("Sheet1") col.Add "C3" col.Add "C5" col.Add "C7" col.Add "F3" col.Add "F5" col.Add "F7" Dim str As String For i = 1 To col.Count str = str & SH.Range(col(i)).Value & "," Next str = Left(str, Len(str) - 1) & vbCrLf FSO.OpenTextFile(PATH, ForAppending, True).Write (str) End Sub
カンマ区切りの文字列にしちゃってテキストファイルに追加書き込みしちゃうのです。
※注意 該当テキストファイルを「メモ帳」で開きっぱなしのときは問題ないですが、エディタとかだとロックかかります
作ったコードをF5キーで連打すると
ウィンドウズのバージョンは気にしちゃだめですってば。
あとは適当に読み取りたい側のBookにテキストファイル読み取るものを作成。
Sub readTxt() Dim FSO As New Scripting.FileSystemObject Dim col As New Collection Dim PATH As String Dim SH As Worksheet PATH = ThisWorkbook.PATH & "\db.txt" Set SH = ThisWorkbook.Worksheets("Sheet2") Dim str As String str = FSO.OpenTextFile(PATH, ForReading).ReadAll Dim i As Long Dim k As Long Dim splRow Dim tageRow As Long tageRow = 2 splRow = Split(str, vbCrLf) For i = 0 To UBound(splRow) - 1 For k = 0 To UBound(Split(splRow(i), ",")) SH.Cells(tageRow, k + 1).Value = Split(splRow(i), ",")(k) Next k tageRow = tageRow + 1 Next End Sub[f:id:nazuna_0124:20170312124329p:plain]
ふつうに読み取り結果。
テキストファイルへの読み書きは不思議な速さなので
覚えておくとたまに幸せになれますというお話でした!