質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

3回答

526閲覧

VBAのRangeオブジェクトに関して

tkt1964

総合スコア5

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

1クリップ

投稿2020/11/05 04:44

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
エクセルの1行1行に対して検索を行い、セルの背景色(黄色)がついたセルがあれば
先頭列に「変更者」という表示をさせるマクロを作成しているのですが、エラーが出ており困っております

発生している問題・エラーメッセージ

rangeメソッド 失敗 globalオブジェクト

エラーメッセージ

該当のソースコード

ソースコード

Dim c As Range
Dim Rng As Range
Dim firstAddress As String
Dim i As Long

Application.FindFormat.Clear Application.FindFormat.Interior.Color = 65535 i = 123 Set c = Range(Rows(1), Rows(i)).Find(What:="*", SearchFormat:=True) If c Is Nothing Then Range(Cells(1, i)) = "" Exit Sub Else firstAddress = c.Address Set Rng = c Do Set c = Range(Rows(1), Rows(i)).Find(What:="*", _ After:=c, _ SearchFormat:=True) If c Is Nothing Then Exit Do If c.Address = firstAddress Then Exit Do Set Rng = Union(Rng, c) Loop End If With WorksheetFunction **__Range(Cells(1, i)) = "変更者"__** End With

End Sub

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

Range(Cells(1, i)) = "変更者"
下から3行目がエラー出ているみたいなのですが、どんな定義付けでもエラーが出ております・・
ここにより詳細な情報を記載してください。

試したこと

ここに問題に対して試したことを記載してください。

###困っておりますW/ツールのバージョンなど)

ここにより詳細な

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

Rangeは範囲を表さないといけないので、Cellsひとつではエラーになります。
無理にRangeで書くならこうなります。

VBA

1Range(Cells(1, i), Cells(1, i)).Value = "変更者"

ただ、以下でも一緒です。

VBA

1Cells(1, i).Value = "変更者"

などということよりも、もっと色々な問題を抱えているので全面的に見直した方がいいでしょう。
例えば、Range(Rows(1), Rows(i))は1列目しか対象になっていません。
With WorksheetFunctionも意味がないですね。
Findの結果をUnionしてますけど、それも活かされていないです。
Unionしておいて後で一括で処理しようと思っているのかもしれませんが、1列目に対して処理を行うにはループで処理しないといけません。
むしろFindのループ内で"変更者"を入れてしまってもいいと思います。

投稿2020/11/05 06:00

ttyp03

総合スコア17000

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tkt1964

2020/11/05 09:02

アドバイス誠にありがとうございます。 ちょっと直してみます。
guest

0

色んな所に色々と問題がありますが、
Cells(1,i) = "変更者" ではだめなのでしょうか。

回答が被ってしまったのでちょっと追記。
Rangeプロパティの第2引数を省略するなら、Rangeオブジェクトは渡せないと思います。
他の箇所にもそんなのありますね。

そもそもVBAについてもっと調べて、
ある程度は基本・基礎を理解した方が良いです。

投稿2020/11/05 05:10

編集2020/11/05 05:25
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tkt1964

2020/11/05 09:03

busyodaさん アドバイス誠にありがとうございます。 理解するように精進いたします。
guest

0

ベストアンサー

ExcelVBA

1Sub aaa() 2 Cells(1, 123).Value = "test" 3End Sub

やりたいことはこういうことですか?

コードを読んでもtkt1964さんのやりたいことがわかりません。

アクティブなシートの
使っているセル範囲の内、
黄色に塗りつぶしてあるセルの
同じ列の1行目に「変更者」という文字を入力したい
のでしょうか?

mattuwanさんの仰る通りで、黄色のセル背景が存在する同じ列の1行目に「変更者」という文字を入力したいです!

例えばこんな感じかと。

ExcelVBA

1Sub test() 2 Dim c As Range 3 Dim r As Range 4 Dim s As String 5 6 Application.FindFormat.Interior.Color = vbYellow 'セルの書式の検索条件の設定 7 ActiveSheet.Rows(1).ClearContents 'シートの1行目をクリア 8 9 'シート上の使っているセル範囲の列の集合の各列を順に見ていく 10 For Each c In ActiveSheet.UsedRange.Columns 11 Set r = Nothing '変数の初期化 12 Set r = c.Find(What:="*", SearchFormat:=True) '検索 13 14 '見つかったかどうかで結果を変数に記録 15 If Not r Is Nothing Then 16 s = "変更者" 17 Else 18 s = "" 19 End If 20 21 c.Cells(0).Value = s '変数の値をセル範囲の0番目のセルへ記入 22 Next 23End Sub

※シート上の状態によってはエラーになるかも知れません。

投稿2020/11/05 05:09

編集2020/11/05 09:02
mattuwan

総合スコア2163

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tkt1964

2020/11/05 06:50

mattuwanさんの仰る通りで、黄色のセル背景が存在する同じ列の1行目に「変更者」という文字を入力したいです!
tkt1964

2020/11/07 13:25

mattuwanさん、返信遅くなりました。 mattuwanさんのを活用して出来ました!! 誠にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問