
当方VBA勉強中の者です。
以下のことをしたくて学習を始めました。
①特定フォルダ内に格納されている全テキストファイルを読み込み
② ①の内容を新規シートに張り付け、これを繰り返す。
ここまでは諸々調べて出来たように思えます。(Excel2016)
諸事情によりコードを掲載すると質問が通りませんでしたので検索したのですが、
こちらのご回答者様と類似した内容のVBAを作成してみました。
https://oshiete.goo.ne.jp/qa/6689790.html
少し逸れましたが、この後以下のことをしたくなりました。
③各シートの13,14,15,16行目に特定の文字列(数字の1以上)が含まれている場合、シート見出しの色を赤色にしたい。
参考までですが、テキスト内容はこのような形です。
>>>>>>>>>>
1~6行目:文字列
7行目:空白
8~最大16行目 ;テキストによって13行目まで等、行数が異なり不定です。
約17行目:空白 ; 以後何かしらの文字列が18行目以降にあります。
8~最大16行目は以下のようになっています。 ;あくまでイメージです。
8 -------------------------------
9 **** **** *****
10 **** **** *****
11 **** **** *****
12 -------------------------------
13 userA no 6 ******
14 userB no 0 ******
15 userC no 0 ******
16
>>>>>>>>>>
Tabプロジェクト内のColorIndexプロジェクトを使う等、所々アタリはついているのですが、
一度Subを区切ってしまったので、追記するのが良いのか。
そもそも内容をループ処理に変更してその中で処理しなければなのか。
不定の行数の表現や、そもそもの抽出方法をどうすべきか方針が固まらず、
行き詰ってしまいました。
有識者の方、上記を満たすようなVBAはどのようなものになりますでしょうか。
ご教示いただけますと大変助かります。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
No1です。
>0を含めたどの数字が入っていようと、メッセージボックス
>"あり"の判定となってしまいます。
私の環境では、含まれている数字が0だけの場合は「なし」と判定されます。
>範囲もFindの数字も誤ってないように見受けられるのですが、
No1のコードの意味を変えて実行しているものと推測します。
例えば、
「 i = 1 」としているところを、「 i = 0 」に変えればそのようになりますけれど・・?
No.2
- 回答日時:
こんばんは。
>③各シートの13,14,15,16行目に特定の文字列(数字の1以上)が含まれている場合、シート見出しの色を赤色にしたい。
userA no 6 ****** : これは対象
userB no 0 ****** : これは対象外
Like演算子が、便利に使えると思います。 例えば下記はどうでしょうか?
全シートのA13:A16を検索しています。
Sub test11()
Dim mySh As Worksheet, myRng As Range
For Each mySh In Worksheets
For Each myRng In mySh.Range("A13:A16")
If myRng Like "user* no [1-9]*" Then
’処理内容を記載
MsgBox myRng.Address & "OK!"
End If
Next myRng
Next mySh
End Sub
No.1
- 回答日時:
こんにちは
>特定の文字列(数字の1以上)が含まれている場合~~
がわかればよいものと解釈しました。
表現を変えれば、セル範囲内に1~9の文字が存在するか否かを調べればよいことになるので、"*数字*"で検索してヒットすれば「あり」と判定できます。
(正規表現を用いる方法も考えられますが、面倒なので・・)
以下は、ひとまずアクティブシートを対象にしてありますが、変数wsの内容を対象シートにすれば、そのシートを検索します。
対象のセル範囲が列全体なのか、A列だけでよいのかわかりませんけれど、とりあえずA列にしてあります。
(違っている場合は、セル範囲を変えればそのまま応用できるはずです)
「1~9」の文字があれば「あり」、無ければ「なし」と表示されます。
Sub Sample()
Set ws = ActiveSheet
i = 1
Set r = Nothing
While i < 10 And r Is Nothing
Set r = ws.Range("A13:A16").Find("*" & i & "*")
i = i + 1
Wend
If r Is Nothing Then MsgBox "なし" Else MsgBox "あり"
End Sub
ご回答いただきありがとうございます。
>表現を変えれば、セル範囲内に1~9の文字が存在するか否かを調べればよいことになるので...
→なるほど。多角的に見るとヒントがあったりするのですね。
まずは言葉が不足しておりすみません。
汲んで頂いた通り、問題の箇所はA13~A16になります。
試しにいくつかのシートで実行してみたところ、
0を含めたどの数字が入っていようと、メッセージボックス"あり"の判定となってしまいます。
範囲もFindの数字も誤ってないように見受けられるのですが、、
この原因を探すことはできますでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
あるセルに文字が入力されるとシート見出しの色を自動で変更したい
その他(Microsoft Office)
-
VBAで条件によってシート見出しの色を変更したい
Excel(エクセル)
-
セルの値によって、シート見出しの色を変更したい
Visual Basic(VBA)
-
-
4
シート見出しの色を自動的に変更させたい
Excel(エクセル)
-
5
【 Excel】シートの見出しに自動で色を付けるには?
Excel(エクセル)
-
6
シート見出しの色を自動で変えるには
Excel(エクセル)
-
7
[EXCELマクロ] シートタブに自動で色をつけるには?
Excel(エクセル)
-
8
【VBA】色のついたシート名を取得
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelマクロのエラーを解決した...
-
実行時エラー1004「Select メソ...
-
【ExcelVBA】全シートのセルの...
-
excelのマクロで該当処理できな...
-
エクセルのシート名変更で重複...
-
特定の文字を含むシートだけマ...
-
シートが保護されている状態で...
-
EXCEL VBAで複数シートから該当...
-
ExcelのVBAを使い、複数シート...
-
【VBA】色のついたシート名を取得
-
VBAで指定シート以外の選択
-
同じ作業を複数のシートに実行...
-
【エクセルVBA】「Protect User...
-
Excel VBA での計算について…
-
ユーザーフォームに入力したデ...
-
VBA ユーザーフォーム上のチェ...
-
【エクセル】オプションボタン...
-
VBA 入力月で該当シートを選択...
-
【Excel VBA】Worksheets().Act...
-
【VBA】全ての複数シートから指...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
特定の文字を含むシートだけマ...
-
実行時エラー'1004': WorkSheet...
-
ユーザーフォームに入力したデ...
-
【ExcelVBA】全シートのセルの...
-
エクセルVBA Ifでシート名が合...
-
実行時エラー1004「Select メソ...
-
VBA 存在しないシートを選...
-
エクセルで通し番号を入れてチ...
-
VBA 検索して一致したセル...
-
XL:BeforeDoubleClickが動かない
-
VBA 指定した回数分、別シート...
-
VBAマクロでシートコピーした新...
-
シートが保護されている状態で...
-
ブック名、シート名を他のモジ...
-
【VBA】全ての複数シートから指...
-
別のシートから値を取得するとき
-
ExcelのVBAのマクロで他のシー...
-
Excel チェックボックスにチェ...
おすすめ情報