お忙しいところ大変申し訳ありません、ご回答の程お願い申し上げます。
入力されるデータと列の数は毎回異なり入力された文字自体を修正するVBAを組みたいのですが、検索などで調べた結果「SendKeysステートメント」のコマンド「 SendKeys "{F2}"」というものを発見しました。
それで構文を組んでみたのですが、
Sub Macro1()
Worksheets(1).Activate
Range("A2").Activate
SendKeys "{F2}"
End sub
で単一セルを修正する事はできました。
これを「列(列は毎回固定です)の空白セルまで」というプログラムは組めるのでしょうか?
お忙しい中申し訳ありませんがご回答いただければ幸いです。
No.1
- 回答日時:
キーボードの[F2]押下ってセルを入力状態にするだけでは?
セルの値を編集するなら、
Sub Macro1()
Dim xlsSheet As Excel.Worksheet
Dim xlsRange As Excel.Range
Dim strTmp As Excel.Range
Set xlsSheet = Worksheets(1)
Set xlsRange = xlsSheet.Range("A2")
MsgBox xlsRange.Value
xlsRange.Value = xlsRange.Value & "Test"
End Sub
とかでいいのでは?
# SendKeys も Activate もかなり有名な欠点があるけど
# 知った上で使っているんでしょうか。
Sub Macro1()
Dim xlsSheet As Excel.Worksheet
Dim xlsRange As Excel.Range
Dim xlsTargetRange As Excel.Range
Dim strTmp As Excel.Range
Dim intColCount As Integer
Dim intColIndex As Integer
Set xlsSheet = Worksheets(1)
Set xlsRange = xlsSheet.Range("A2")
intColCount = xlsRange.End(xlToRight).Column - xlsRange.Column + 1
MsgBox xlsRange.End(xlToRight).Address & "まで" & intColCount & "列使ってます。"
For intColIndex = 0 To intColCount - 1
Set xlsTargetRange = xlsRange.Offset(0, intColIndex)
xlsTargetRange.Value = xlsTargetRange.Value & "Test"
Next
End Sub
End(xlToRight)を使わなくても、セルを1つずつずらしていって
Value で ""(空白)条件に合ったら Exit For するのでもできますよね。
→# SendKeys も Activate もかなり有名な欠点があるけど
# 知った上で使っているんでしょうか。
その有名な欠点を検索して探してみます。
サンプルコードなどの組み方非常に勉強になりました、お忙しい中提示していただいてありがとうございます。
No.2
- 回答日時:
今まで色んなVBAの記事を見ていると、SendKeysは他に方法が無いときに使う手段のようです。
初心者が使うのは適当でないと思う。
(1)1文字だけ置換、決った文字列(数種)だけ置換など、ルール性があるならプログラムで置換を使う
などの方法を考えることでしょう。
ーー
その列のデータ最終行を掴むコードなど、毎日回答にも使われているし、WEBで照会すれば直ぐ出てくる。
こういう方法を勉強しないとVBAなど出来ませんよ。
Googleででも「エクセル データ最終行」
http://www.happy2-island.com/excelsmile/smile03/ … など
ーー
SendKeys "{F2}"
の件は私が色々やったがうまく行かない(私の力不足だけかもしれないが)
数式バー部に出たデータの任意の位置に(先頭でも)クリックを入れると同等のような動作がVBAでは判らない。
APIとかを使わないとならないのかな。
(よく質問にあるが)初心者の思いつき方法で、解決方法を難しくしてしまっている例かなと思う。
ーー
私が連想した例
セルの値に r が在ればss に変える例。
Sub test02()
d = Worksheets("Sheet1").Range("A65536").End(xlUp).Row '最終行取得
MsgBox d
For i = 2 To d
x = Worksheets("Sheet1").Cells(i, "A")
p = InStr(x, "r")
If p <> 0 Then
Worksheets("Sheet1").Cells(i, "A").Characters(p, 1).Text = "ss"
End If
Next i
End Sub
列データを範囲指定して、For Eachを使う手もある。(自分で操作する場合用か)
他人に入力をやらせるプログラムを、初心者が造るのは(操作のパラエティの対処がわからないだろうから)危険ありと思う。
>他人に入力をやらせるプログラムを、初心者が造るのは(操作のパラエティの対処がわからないだろうから)危険ありと思う。
たしかにおっしゃるとおりだと思います。予測できない動作をしないようにこれからも勉強したいと思います。
お忙しい中サンプルコードまで提示していただいて本当にありがとうございました。
No.3ベストアンサー
- 回答日時:
これは単一セルだからたまたま実現できたに過ぎません。
範囲内でSendKeys "{F2}"を実行しても入力完了を待ち合わせる事は出来ませんので
各セルに再編集さえできません。
一例ですが、セル選択したら編集モードに変更する事ような事は可能なのでイベント
プロシージャを利用して以下の方法は如何でしょうか。
(1)シートモジュールにしたいのでシートタグ名上で右クリック→コードの表示→以下の
コードを貼り付けてお試しください。
■サンプルコード
セル選択でA列範囲、且つセル未入力以外なら該当セルを編集モードに切り替えます。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("A:A")) Is Nothing _
Or Target = "" Then Exit Sub
SendKeys "{F2}"
End Sub
この回答への補足
お忙しい中ご回答ありがとうございます。
サンプルコードを使用させていただいたところ、考えていた通りの動きをしてくれました!
本当に凄いです!
補足してもうしわけありませんが、上記のコードをブック(A)から呼び出したブック(B)(つまり他のブックの列に利用できるかどうか)何ですが可能でしょうか?
追加補足で申し訳ありませんがご回答いただければ幸いです。
お忙しい中本当にご回答の程ありがとうございました。サンプルコードまで提示していただいて期日がせまっている私には嬉しかったです。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBA マクロ ある列の最終行迄を参照し、別の列の空白セルに値を入力したいです 2 2023/03/05 02:44
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Excel(エクセル) ある言葉が含まれている一つの文(フレーズ)のみに色付けをしたいです 2 2022/07/29 23:12
- Visual Basic(VBA) エクセルVBAについて 2 2023/01/31 16:21
- Excel(エクセル) SUMIFのIF分岐について 4 2023/04/15 12:57
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Visual Basic(VBA) 特定の文字を含むシートだけマクロ処理をしたい 1 2023/05/22 01:43
- Excel(エクセル) Excel VBAで、行の高さを、上下1文字分程度高くしたい 3 2023/04/23 00:17
- Excel(エクセル) Excel 値を返す数式についてです 3 2022/11/21 20:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
i=cells(Rows.Count, 1)とi=cel...
-
Excelのハイパーリンクにマクロ...
-
【Excel】指定したセルの名前で...
-
Excelで指定した日付から過去の...
-
DataGridViewのセル編集完了後...
-
【Excel VBA】指定行以降をクリ...
-
EXCELで変数をペーストしたい
-
Excel vbaで特定の文字以外が入...
-
【VBA】指定したセルと同じ値で...
-
特定行の色を変えたい(FlexGrid)
-
VBAでセルをクリックする回...
-
EXCELのVBA-フィルタ抽出後の...
-
スプレッドシートの数値列に対...
-
VBAの計算で@が出てしまう件
-
セル色なしの行一括削除
-
3桁または4桁の数値を時刻に...
-
”戻り値”が変化したときに、マ...
-
TODAY()で設定したセルの日付...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
【Excel VBA】指定行以降をクリ...
-
i=cells(Rows.Count, 1)とi=cel...
-
【Excel】指定したセルの名前で...
-
Excelで指定した日付から過去の...
-
特定の文字を条件に行挿入とそ...
-
Excel VBA、 別ブックの最終行...
-
EXCELで変数をペーストしたい
-
Excelのプルダウンで2列分の情...
-
Excel vbaで特定の文字以外が入...
-
TODAY()で設定したセルの日付...
-
screenupdatingが機能しなくて...
-
DataGridViewの各セル幅を自由...
-
Sub 要具ライフ() ActiveSheet....
-
【EXCEL VBA】Range("A:A").Fi...
-
VBAを使用した時間管理
-
VBAでセルをクリックする回...
-
セル色なしの行一括削除
-
エクセルVBAでコピーして順...
おすすめ情報