アプリ版:「スタンプのみでお礼する」機能のリリースについて

皆様のお力をお貸しください

1.フォルダを選択する
2.フォルダのファイルでINIを開く
3.開いたINIファイルをExcelに転機する
4.シートの名前をファイル名(.INI不要)に変える
5.ファイルを閉じる
6.次のINIファイルを開く(2)

全てのファイルを開き終わったら終了
というVBAを作りたいのですが、

・フォルダの中身をすべて書き出す
・テキストの中身をExcelに書き出す

という二つのサンプルで作れると思ったのですが、思うようにいかず・・・

ご助力頂ければと思います。
よろしくお願いいたします。

質問者からの補足コメント

  • 一応動く処理ができました
    こちらになります。

    ここをこうした方がいい等ありましたらご指摘いただけますと助かります

    「VBA ファイル一覧を取得して全てのIN」の補足画像1
      補足日時:2019/02/28 08:08
  • へこむわー

    急ぎ上げた物で肝心な部分が1部欠けてるのと圧縮で読みにくいので帰宅次第上げ直します
    申し訳ございません

      補足日時:2019/02/28 09:50

A 回答 (6件)

BAについてはともかくとして、画像の雰囲気で、行番号が見えましたので、それは、今は使いかたを知っている人はいないような気がしますので、それについて少し解説が必要かと思いました。

今は、基本的には行番号は不要です。

外部ツールで大事ものは、Indenter という、整形行下げツールです。http://blog.dreamhive.co.jp/yama/9326.html
ただ、現在、その本家のダウンロードサイトではサーバーエラーが発生しています。2019/03/04
他にも、MZ-Tools というものがあります。有償ですので、すぐにお勧めというわけにはいきませんが、私の愛用ツールです。https://www.ka-net.org/blog/?p=6260
他にも、XMLを編集するエディターやら、ハンドルを調べるSpyXX など、開発に備えておくと困らないと思います。

質問の件、再度、いままでにまとめたものをもう一度質問されれば、また別の人が別の考え方で、回答してくれるかもしれません。ひとまず、ここを閉められるそうですから、私も退くことにします。お体おだいじに。
    • good
    • 0
この回答へのお礼

ソース貼り付けたのが秀丸です
行数有ると紙面で見直すときに便利なのですみません

お礼日時:2019/03/06 14:54

ちょっと関係のない話をさせていただきます。



画像は ✕400倍しても、jpg(204 x 500)では見えません。確か、画像はある程度の大きさでも、貼り付ける時にサイズの圧縮は利いたとは思いますが、外部のストレージサイトを使うと良いですね。

ここで最近見かけるストレージサイトは、firestrage (https://firestorage.jp/doc/first)です。
会員登録しないと、後消せなくなりますが、放っておけば、1週間程度で消えてしまいます。私も使っています。
質問者、質問後に与えられるスペースはあまり大きくないようです。ここの常連の方が使っていたテキスト・ソースを表示する外部サイトもあるようです。https://ideone.com/ (登録だけはしています。)

僭越かもしれませんが、全体を見る限りは、たぶん、初歩的なことから指摘するかもしれません。これでも、本格的に初めて15年、ブランクは、1週間程度で、ずっと何かしらVBAはイジってきていますから、何かヒントくらいは与えられると思います。それに、VBAの便利な開発用のツールをいくつか持っていますので、よかったら紹介させていただきます。ただ、外国製なので、紹介してもあまり興味を見せないようですが。ある程度、若い方だったら、いえ、40代ぐらいまでなら、今後は、日本語だけでは、まかり通らなくなるかもしれませんね。
    • good
    • 0
この回答へのお礼

Thank you

金土日と高熱で倒れてお礼が遅くなり申し訳ございません
職場のPCからソースを抜き出すのが機密情報名の無い印刷しか無いので画像での処理になっております。

外部ツールの情報ありがとうございます
尚、英語スキルは英会話はそこそこ出来た(はず)ですが、英語が書けないレベルです(;´Д`)

GOOさんがベストアンサー選べとうるさいのでもう少ししたら一旦閉めます
本当にありがとうございました

お礼日時:2019/03/04 12:21

もとの質問文で、いくつか欠けている部分がありますが、こちらで想像して補填してしまいました。



実際は、メインはこれですね。
「バッチファイルをまとめたiniファイルを新規サーバに合わせてPC名の部分を変更する作業」を行っております「バッチファイルをまとめたiniファイル」というのはよく分かりませんが、入出力で、シート名は拡張子はなしにしても、入れだしそのものの拡張子は、iniにするわけですね。

私なりの解釈で、たたき台を作ってみます。そうしないと、文章のやり取りではイメージが湧いてこないのです。VBAマクロを作る時は、漠然とでよいので、イメージがあるとやりやすいのです。任意のフォルダーから一括で取得するというスタイルになりす。出力も別のフォルダーに一括で出力するようになります。
ただし、現行ではS-JIS仕様になっています。他のエンコードの時は、Encode/Decode Converter が必要になります。また、個別のフォルダーに流し込むスタイルの場合は、多少の手直しが必要です。(No.3 コードを参照)

シートは、全て使いますので、何かデータがあった場合は、コピーしてデータを退避してください。
コードにはコメントがありますので、一度目を通してください。

'//標準モジュール
Sub FilesImport()
'一括ファイルインポート
 On Error GoTo errHandler
 Dim Fn As String, f As String
 Dim TextLine As String
 Dim i As Long, j As Long, k As Long
 Dim buf
 Dim mPath As String
 Dim Sh As Worksheet
 Dim myAr(300)

 With Application.FileDialog(msoFileDialogFilePicker) '当初はFolderPicker にしていたが、iniファイルが見えない。
  .Title = "フォルダー選択 --1つ選べは、残りもインポートします"
  .Filters.Add "ini ファイル", "*.ini"
  .InitialView = msoFileDialogViewDetails

  If .Show = -1 Then
   buf = .SelectedItems(1)
   mPath = Mid(buf, 1, InStrRev(buf, "\"))
   End If
 End With
 Fn = Dir(mPath & "*.ini", vbNormal)
 Do While Fn <> ""
  If Fn <> "." And Fn <> ".." Then
   myAr(i) = mPath & Fn
   i = i + 1
   If i > 300 Then Exit Do 'Limit
  End If
  Fn = Dir()
 Loop
 i = i - 1
 If myAr(0) = "" Then MsgBox "該当ファイルが見当たりません。", vbCritical: Exit Sub
 For j = 0 To i
  If Worksheets.Count < (j + 1) Then
   Worksheets.Add After:=Worksheets(Worksheets.Count)
  ElseIf Not Worksheets(j + 1).Name Like "Sheet*" Then
   Worksheets(j + 1).Name = "T" & (j + 1) 'やり直しを想定
  End If
  Set Sh = Worksheets(j + 1)
  Sh.UsedRange.ClearContents '既に書かれてあるものは消してしまいます。
  f = myAr(j)
  Open f For Input As #1
  Do While Not EOF(1)
   Line Input #1, TextLine
   If TextLine <> "" Then
    k = k + 1
    Sh.Cells(k, 1).Value = TextLine
   End If
  Loop
  Close #1
  k = 0
  TextLine = ""
   buf = Mid(f, InStrRev(f, "\") + 1)
   Sh.Name = Mid(buf, 1, InStrRev(buf, ".") - 1)
 Next j
errHandler:
If Err() <> 0 Then
  MsgBox "Error " & Err.Number & " (" & Err.Description & ") in FilesImport"
End If
End Sub
'------------------------

Sub FilesExport()
 '一括出力
 '*******************
 'ユーザー設定(以下のパスを書き入れてください)
 Const mPath As String = "D:\"
 '******************
 Dim endLine As Long
 Dim i As Long, j As Long
 Dim strLine As String

 For j = 1 To Worksheets.Count
  If Not Worksheets(j).Name Like "Sheet*" Then
   Fn = mPath & Worksheets(j).Name & ".ini"
   With Worksheets(j)
    endLine = .Cells(Rows.Count, 1).End(xlUp).Row
    Open Fn For Output As #1
    For i = 1 To endLine
     strLine = .Cells(i, 1).Value '日付があれば、Textプロパティ
     Print #1, strLine
     strLine = ""
    Next i
    Close #1
   End With
  End If
 Next j
 Beep
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます
一応なんとなく稼働した物は出来たのですが、ソースをはる暇もなく情報を出せておりませんでした。
後ほど確認させて頂きます!

お礼日時:2019/02/27 22:28

No..2 の回答者です。


一応、iniファイル自体を読むブログラムは調べれば分かりますが、ここでは公開しません。VBAでは、レジストリを書き換えるに匹敵する、特殊なブログラムのひとつです。

前回の書き込みからみても、ご質問者さんが、プログラミング全般では、とても素人とは思えませんが、私のようなVBAを多少とも嗜む人間には、非常に特殊なことをしているように思い、理解できませんでした。

>他の処理の関係でiniファイルの中身を取り出すのが目的で、テキストを読めればいいのです
>編集を大量にしたい所がありまして・・・


Sub ImportText()
Dim FName As Variant
Dim TextLine As String
Dim i As Long
FName = Application.GetOpenFilename("Text File (*.txt;*.ini),*.txt;*.ini", , "テキストインポート")
If FName = False Then Exit Sub
Open FName For Input As #1
Do While Not EOF(1)
 Line Input #1, TextLine
 i = i + 1
 Cells(i, 1).Value = TextLine
Loop
Close #1
End Sub
'//

ふつうは、テキストエディタを使いますね。中でも、NotePad ++ (日本語対応)は、汎用性があって、扱いは言語によっては難しいけれども、XMLも扱えますので便利です。書き換えは、前回示した正規表現で行ったりします。
    • good
    • 0
この回答へのお礼

有難うございます
プログラム経験は昔スーパーファミコンのソフトを作成を20年前位にした事がある程度です

「バッチファイルをまとめたiniファイルを新規サーバに合わせてPC名の部分を変更する作業」を行っております

ですのでそれ用のiniファイルを読み込んで出力するツールが必要なのです
言葉不足で申し訳ございません

お礼日時:2019/02/25 13:48

少し伺いますが、なぜ、iniファイルを利用とすることを考えたのでしょうか。


今は、Excelでは iniファイルは使いません。

一般的には、text ファイルを扱います。
iniファイルというのは、一種の環境設定ファイルです。
https://wa3.i-3-i.info/word11391.html
iniファイルは特殊な書き込み/呼び出しの仕方をします。もちろん、もう過去の遺物に違いないですが。iniファイルはファイル一覧を書き込むような使い方はしません。Office全般では、iniファイルの代わりに、カスタムドキュメントプロパティを利用します。

それに、
>・フォルダの中身をすべて書き出す
>・テキストの中身をExcelに書き出す
ファイル名が必要なら、Excelに直接書き出せばよいと思うのです。

>一行一セルのこちらのサイトを参考に見ました
凝った書き方をしている割には、もう少し標準的な書き方があります。
Excelでは、 外部ファイルを開く時は、Application.GetOpenFilename を使います。

別に参考にならないかもしれませんが、ひとつコードを置いておきます。

例:
Sub FileLists()
 Const mPATH As String = "D:\Excel\
 Dim i As Long
 Dim fn As String
 fn = Dir(mPATH & "*.xls?", vbNormal)
 Do While fn <> ""
  i = i + 1
  Cells(i, 1).Value = fn
  fn = Dir()
 Loop
End Sub
    • good
    • 0
この回答へのお礼

他の処理の関係でiniファイルの中身を取り出すのが目的で、テキストを読めればいいのです
編集を大量にしたい所がありまして・・・


ややこしくてすみません
iniを使うわけではございません

お礼日時:2019/02/24 20:51

>・フォルダの中身をすべて書き出す


https://oshiete.goo.ne.jp/qa/10987554.html
の#1 回答を抜粋

http://officetanaka.net/excel/vba/file/file07.htm
を参考に、Dir関数でファイルリストを取り出します。

>・テキストの中身をExcelに書き出す
INIファイルの中身を、Excelのシート上に出力することと推測されますが、
目的・条件によって異なりますが、少なくとも2パターンあります。

・1行1セル  (出力先となるセルのサイズに限界があるので、通常はこちら)
・全体で1セル (ファイルサイズが小さい場合限定)

どちらを希望でしょうか?
    • good
    • 0
この回答へのお礼

ご返信ありがとうございます。

一行一セルのこちらのサイトを参考に見ました (https://www.ipentec.com/document/vba-open-read-t …
こちらと上記田中様のソースを見て知らない宣言が色々とでて混乱しておりました(filedialogやApplication等

お礼日時:2019/02/22 12:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています