現状では数百数千セルある中から文字列を選択して文字色変更を繰り返す、という辛い作業を続けているのですが この様に、指定した文字列だけの色を変更って出来ませんか? 0205デフォルトの名無しさん (ワッチョイ 9b2f-AHN4)2020/04/07(火) 17:49:52.17ID:yHbrhPie0>>204 Sub 特定文字列に色をぬる(検索範囲 As Range, 対象文字列 As String, 色 As Long) Dim r As Range For Each r In 検索範囲 Dim s As Long s = InStr(r.Characters.Text, 対象文字列) If s > 0 Then r.Characters(s, Len(対象文字列)).Font.Color = 色 End If Next End Sub 0206デフォルトの名無しさん (スッップ Sd43-bjOE)2020/04/07(火) 19:26:33.02ID:FCg3JG5md>>205 何か少し違う気がする。 rの中で対象文字列が1回しか変わらないんじゃね?
s=instr(s+1,r.Value,対象文字列)でsが0になるまでループかな? 0207デフォルトの名無しさん (ワッチョイ 23b5-Lkgv)2020/04/07(火) 19:29:30.91ID:ZYiBkzsm0 何から覚えようVBA 0208デフォルトの名無しさん (ワッチョイ 8d7c-5QI3)2020/04/07(火) 19:42:05.21ID:F7VfxkGZ0>>198 やってみてどうなった? 0209デフォルトの名無しさん (アウアウウー Sae9-f+0C)2020/04/07(火) 20:04:27.93ID:4wIwYA/Ra>>207 覚えるのが目的じゃなかろう 0210デフォルトの名無しさん (ワッチョイ 23ad-KBPB)2020/04/07(火) 20:22:06.26ID:83dL758F0>>187,190,200 186です。ご回答有難う御座います。 ご指摘を参考に以下の様な形に変更したところ、強制終了する事なく全ファイルの吸い上げが出来ました。お手数をお掛け致しました。 '// ファイル数カウント // Dim CSVPth As String, CSVNam As String CSVPth = Dir(CSVDir & "*.csv") CSVNam = CSVPth Do While CSVPth <> "" CSVPth = Dir() CSVNam = CSVNam & CSVPth Loop Dim CSVAry As Variant, CSVCnt As Long CSVAry = Split(CSVNam, ".csv") Dim OutAry() As Variant ReDim OutAry(1 To (UBound(CSVAry) + 1) * 6, 1 To 1) Dim LinAry As Variant, LinStg As String, LinCnt As Long '// CSVファイル読込処理 // For CSVCnt = LBound(CSVAry) To UBound(CSVAry) If CSVAry(CSVCnt) <> "" And Dir(CSVDir & CSVAry(CSVCnt) & ".csv") <> "" Then Open CSVDir & CSVAry(CSVCnt) & ".csv" For Input As #CSVCnt + 1 LinCnt = 0 Do While Not EOF(CSVCnt + 1) Line Input #CSVCnt + 1, LinStg LinCnt = LinCnt + 1 LinStg = "" & Replace(LinStg, """", "") & "" LinAry = Split(LinStg, ",") <-- 処理 --> ReDim Preserve OutAry(1 To (UBound(CSVAry) + 1) * 6, 1 To WorksheetFunction.Max(UBound(OutAry, 2), LinCnt) Loop Close #CSVCnt + 1 End If Next Range(Sheet2.Range("A1"), Sheet2.Cells(UBound(OutAry, 2), UBound(OutAry, 1))).Value = WorksheetFunction.Transpose(OutAry) 0211デフォルトの名無しさん (ワッチョイ 5dce-bVUD)2020/04/07(火) 21:04:34.54ID:YDovvV0g0 Windows10になってから、アプリごとに印刷設定を覚えるようになってややこしくなった 以前はプリンタのプロパティからデフォルト状態を決め打ちできたのに 0212デフォルトの名無しさん (ワッチョイ 9b2f-AHN4)2020/04/07(火) 22:46:04.39ID:yHbrhPie0>>206 その辺は仕様がはっきりしないから何とも言えんし そもそも丸投げを受けたつもりはない
Sub Macro1() ChDir "c:\tmp" f = Dir("*.txt") c = 1 Do While f <> "" Open f For Input As #1 For r = 1 To 6 Line Input #1, s Cells(r, c) = Split(s, vbTab)(2) Next Close #1 f = Dir c = c + 1 Loop End Sub 0255デフォルトの名無しさん (ワッチョイ bb7c-slfm)2020/04/11(土) 12:48:46.57ID:7ipBnOPU0>>247 マクロ記録してそれを加工すればいい 0256デフォルトの名無しさん (ワッチョイ 27aa-G6fV)2020/04/11(土) 12:55:48.43ID:Zf+aIjAZ0>>254 うおおおお マジでありがとうございます! いま外出中なので帰ったら速攻でVBE開いて取りかかります!! 他のこんな猿にアドバイスくれる人達に感謝のみ 批判されて当然のスキルしかないのでそういう覚悟もして相談させてもらってます
Dim tag As Variant Dim a As Long tag = Range("S1:S" & Cells(Rows.Count, 19).End(xlUp).Row).Value For a = Cells(Rows.Count, 19).End(xlUp).Row To 2 Step -1 If tag(a, 19) <= 0.98 And tag(a, 19) >= 0.05 Then Rows(a).Delete End If Next 0275デフォルトの名無しさん (ワッチョイ 43ce-AglQ)2020/04/13(月) 14:19:37.44ID:V+m1zN0B0>>274 Dim a As Long For a = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1 If 0.05 <= Cells(a, 19) And Cells(a, 19) <= 0.98 Then Rows(a).Delete End If Next 0276デフォルトの名無しさん (ワッチョイ 47ac-q7V1)2020/04/13(月) 14:20:29.76ID:6KK4qS560 ワークシート機能とか使わないなら、 ・その表を全て一気にもにょっと2次元配列(tableA)にいれる(コンマ数秒) ・2次元配列(tableB)を一旦定義 ・tableAの各行(イメージね)をforeachする。++カウントする変数をつくる。これはtableBの行数。 ・foreachのなかで、tableAのS列がその条件に合致しなければ、tableBに行のそれぞれの要素を代入する(redim preserveしながら) ・できたtableBをどこかにペタッと貼る
たとえばこれをテキストを変換したときにF2:F13にくるデータを エクセルにはB5:B16、C5:C16と順番になるよるに出力するようになるにはどう調整すればいいのか、がんばって調べてます 0279274 (ワッチョイ 06cc-zfCe)2020/04/13(月) 16:10:57.06ID:kcz/TGUB0>>275 ありがとうございます。 0280デフォルトの名無しさん (ラクッペペ MM8e-CJtn)2020/04/13(月) 18:33:52.63ID:xh/6KDMeM>>278 ヒント: F1キー 0281デフォルトの名無しさん (ワッチョイ e2b5-G6fV)2020/04/13(月) 19:37:09.96ID:sGzWGZEv0 Sub テキストから引っ張る() ChDir "C:\Users\user\Desktop\マクロ勉強" 'フォルダ指定 f = Dir("*.txt") c = 2 'テンプレの開始する列の変更 Do While f <> "" Open f For Input As #1 For r = 2 To 13 'テキストの引っ張ってくる行を指定 Line Input #1, s Cells(r, c) = Split(s, vbTab)(2) Next Close #1 f = Dir c = c + 1 Loop End Sub
https://i.imgur.com/7Ujyfqa.jpg0285デフォルトの名無しさん (ワッチョイ 43ce-AglQ)2020/04/13(月) 19:55:45.77ID:V+m1zN0B0 Sub テキストから引っ張る() Dim ファイル名 As String Dim 行 As Integer Dim 列 As Integer Dim 配列() As String Dim 文字列 As String
ChDir "C:\Users\user\Desktop\マクロ勉強" ' フォルダ指定 ファイル名 = Dir("*.txt") 列 = 2 'テンプレの開始する列の変更 Do While ファイル名 <> "" Open ファイル名 For Input As #1 For 行 = 2 To 13 ' テキストの引っ張ってくる行を指定 Line Input #1, 文字列 配列 = Split(文字列, vbTab) Cells(行, 列) = 配列(2) Next Close #1 ファイル名 = Dir() 列 = 列 + 1 Loop End Sub 0286デフォルトの名無しさん (ワッチョイ e2b5-G6fV)2020/04/13(月) 19:58:56.72ID:sGzWGZEv0 うお、変数の宣言をあらかじめわかりやすくしてくれて馬鹿な俺を誘導してくれようとする人が!!絶対そんな感じのありがたい人だ! 今から車に乗って帰ったら速攻PC開きます!−−!! 0287デフォルトの名無しさん (ワッチョイ d7ad-LdNq)2020/04/13(月) 20:19:57.09ID:Kp4LtUp30>>281 >>284 まずVBAの入門書を読んで基礎知識を 整理するといい(するみたいだけど)
Sub テキストファイルをベースに読み込む() ChDir "C:\Users\ikuzo\Desktop\測定データ" 'フォルダ指定 FILE = Dir("*.txt") c = 2 'ベースの開始する列の変更 Do While FILE <> "" Open FILE For Input As #1 For r = 2 To 13 'セルに展開する行を指定 Line Input #1, s Cells(r, c) = Split(s, vbTab)(5) Next Close #1 FILE = Dir c = c + 1 Loop Range("B2:L13").Select Selection.Copy Sheets("測定結果報告書").Select Range("D5:N16").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub
Sub 指定フォルダの全テキスト絞り読み込み() ChDir "C:\Users\user\Desktop\測定機データ" 'フォルダ指定 FILE = Dir("*.txt") retu = 2 'ベース列決定でAは1から Do While FILE <> "" Open FILE For Input As #1 For Tekist = 3 To 12 'ベース任意行決めでテキストは1行目から Line Input #1, s Cells(Tekist, retu) = Split(s, vbTab)(5) 'テキスト初列を()で決めるがAは0から Next Close #1 FILE = Dir retu = retu + 1 'この数だけ列飛ばしにベースに読み込む Loop End Sub
Open FILE For Input As #1 Line Input #1, s ' 1行目を読み込むだけで何も処理をしない Line Input #1, s ' 2行目以下略 For Tekist = 3 To 12 Line Input #1, s ' 3行目以降 Cells(Tekist, retu) = Split(s, vbTab)(5) Next 0297デフォルトの名無しさん (ワッチョイ e2b5-G6fV)2020/04/14(火) 00:29:53.49ID:Ua5gdcz00>>296 本当に本当にありがとう、 上の人たちも本当にありがとう 無知のド素人の俺でも超完璧に動かせました 感謝しかないです。本当に勉強します
Sub 指定フォルダの全テキスト絞り読み込み() ChDir "C:\Users\ikuzo\Desktop\測定機" 'フォルダ指定 FILE = Dir("*.txt") retu = 2 'ベース列を決定でAは1から Do While FILE <> "" Open FILE For Input As #1 'Line Input #1, s ' 1行目を読むだけで何もしない(テキスト1行目からで良ければ普段は封印 'Line Input #1, s ' 2行目以下略 For Tekist = 3 To 12 'ベース初行〜任意行決めでテキストは1行目からだが封印の解放により連動 Line Input #1, s Cells(Tekist, retu) = Split(s, vbTab)(5) 'テキスト初列を()で決めるがAは0から Next Close #1 FILE = Dir retu = retu + 1 'この数字を変えた分だけ列飛ばしにベースに読み込む Loop End Sub