Excel VBA質問箱 IV

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

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


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

【71751】テキストファイルに出力 やす 12/4/5(木) 22:16 質問[未読]
【71753】Re:テキストファイルに出力 kanabun 12/4/5(木) 22:41 発言[未読]
【71754】Re:テキストファイルに出力 UO3 12/4/5(木) 22:45 発言[未読]
【71755】Re:テキストファイルに出力 UO3 12/4/5(木) 22:49 発言[未読]
【71756】Re:テキストファイルに出力 kanabun 12/4/5(木) 23:56 発言[未読]
【71776】Re:テキストファイルに出力 やす 12/4/7(土) 16:35 お礼[未読]
【71759】Re:テキストファイルに出力 UO3 12/4/6(金) 9:29 発言[未読]

【71751】テキストファイルに出力
質問  やす  - 12/4/5(木) 22:16 -

引用なし
パスワード
   テキストファイルに出力したいのですがわからないので教えて下さい

セルA1に5が入力されている
セルB1に4が入力されている
セルA2に1が入力されている
セルB2に”あ”が入力されている
セルA3に11が入力されている
セルB3に”ああ”が入力されている

この状態でてテキストファイルに出力したとき以下のように出力するには
どうやればいいですか

00001あ△△△
00011ああ△△


△:全角スペース

【71753】Re:テキストファイルに出力
発言  kanabun  - 12/4/5(木) 22:41 -

引用なし
パスワード
   ▼やす さん:
>テキストファイルに出力したいのですがわからないので教えて下さい
>
>セルA1に5が入力されている
>セルB1に4が入力されている
>セルA2に1が入力されている
>セルB2に”あ”が入力されている
>セルA3に11が入力されている
>セルB3に”ああ”が入力されている
>
>この状態でてテキストファイルに出力したとき以下のように出力するには
>どうやればいいですか
>
>00001あ△△△
>00011ああ△△
>
>
>△:全角スペース

変換のルールをことばで説明してもらえませんか?

【71754】Re:テキストファイルに出力
発言  UO3  - 12/4/5(木) 22:45 -

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

こんばんは

エクセルデータをテキストファイルとして保存するコードは
マクロ記録で生成できますよね。

なので、目的の文字列を作り、セルに書き込んでおいてテキストファイルとして
保存するということになりますね。

その文字列作成の部品をヒントとして。
生成した文字列と、その桁数を表示しています。

Sub test1()
  Dim s1 As String
  Dim s2 As String
  Dim num As Long
  Dim s3 As String
  
  Dim x As Long
  Dim y As Long
  Dim n As Long
  
  x = Range("A1").Value
  y = Range("B1").Value
  
  num = Range("A2").Value
  s1 = Format(num, String(x, "0"))
  MsgBox s1 & vbLf & Len(s1)

  s2 = Range("B2").Value
  n = y - Len(s2)
  If n > 0 Then
    s2 = s2 & String(n, " ")
  Else
    s2 = Left(s2, y)
  End If
  
  MsgBox s2 & vbLf & Len(s2)
  
  
  s3 = s1 & s2
  MsgBox s3 & vbLf & Len(s3)
  
End Sub

【71755】Re:テキストファイルに出力
発言  UO3  - 12/4/5(木) 22:49 -

引用なし
パスワード
   ↑ 全角スペースでしたね。
s2 = s2 & String(n, " ") これを
s2 = s2 & String(n, " ") これにかえてください。

【71756】Re:テキストファイルに出力
発言  kanabun  - 12/4/5(木) 23:56 -

引用なし
パスワード
   A1 には "0"の個数、 B1 には 全角スペースの個数 が書き込んであり、
2行目以降のA列数値を RSet、B列文字列を LSetしていく
--- ということでいいですか?
参考です

Sub test2()
 Dim io As Integer
 Dim Filename As String
 Dim i As Long
 Dim m As Long, n As Long
 Dim s1 As String, s2 As String, s As String
 
 Filename = Application.GetSaveAsFilename("test2", "テキスト,*.txt")
 If Filename = "False" Then Exit Sub
 
 io = FreeFile()
 Open Filename For Output As io
 m = Range("A1").Value
 n = Range("B1").Value
 For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
   s1 = String$(m, "0")
   s2 = String$(n, " ")
   s = CStr(Cells(i, 1).Value)
   Mid(s1, m + 1 - Len(s)) = s
   Mid(s2, 1) = Cells(i, 2).Value
   Print #io, s1; s2
 Next
 Close io
 
 MsgBox "出力しました", , Dir$(Filename)
End Sub

【71759】Re:テキストファイルに出力
発言  UO3  - 12/4/6(金) 9:29 -

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

おはようございます
kanabunさんからループも含めたコード案がアップされました。
この中で、私が提示した s2 の生成につき、別手法がかかれていますね。
よく見ると、私の提示した手法は、いささか、まだるっこしいといいますか
おそまつでしたね。

nの値がいくつであれ、以下のように一本化もできますね。

s2 = Left(Range("B2").Value & String$(n, " "), n)

【71776】Re:テキストファイルに出力
お礼  やす  - 12/4/7(土) 16:35 -

引用なし
パスワード
   質問のしかたがわかりにくく、失礼しました。

有難う御座いました。

▼kanabun さん:
>A1 には "0"の個数、 B1 には 全角スペースの個数 が書き込んであり、
>2行目以降のA列数値を RSet、B列文字列を LSetしていく
>--- ということでいいですか?
>参考です
>
>Sub test2()
> Dim io As Integer
> Dim Filename As String
> Dim i As Long
> Dim m As Long, n As Long
> Dim s1 As String, s2 As String, s As String
> 
> Filename = Application.GetSaveAsFilename("test2", "テキスト,*.txt")
> If Filename = "False" Then Exit Sub
> 
> io = FreeFile()
> Open Filename For Output As io
> m = Range("A1").Value
> n = Range("B1").Value
> For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
>   s1 = String$(m, "0")
>   s2 = String$(n, " ")
>   s = CStr(Cells(i, 1).Value)
>   Mid(s1, m + 1 - Len(s)) = s
>   Mid(s2, 1) = Cells(i, 2).Value
>   Print #io, s1; s2
> Next
> Close io
> 
> MsgBox "出力しました", , Dir$(Filename)
>End Sub

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