以下のようにA列に通し番号(1~),D列にIDが入力されているシートがあります。
A列中の指定した範囲の通し番号(例,3~5)と同じ行にあるD列の値を順番にセル番地(X200)に上書きでコピペするマクロはどのように作成したら良いでしょうか。
(以下の例でいうと,edfc,tgod,yudpをX200セルに順番に上書きでコピペされるようにしたいです)
調べても力不足で,コードの書き方がわかりません。わかる方,ご教示いただけますようお願いいたします。
A列(通し番号) ~ D列(ID)
1 abcd
2 acae
3 edfc
4 tgod
5 yudp
6 yupo
No.3ベストアンサー
- 回答日時:
No2です。
>通し番号の最初と最後を入力するためのセルがあり,~
>チェックのコードは不要です。
無チェックで良いのなら単純にループすればすむ話では?
セル位置が不明なので、文章混じりになりますが、
Dim i As Long
For i = スタート番号 To エンド番号
Range("X200").Value = D列のスタートセル.Offset(, i - 1).Value
'残りの処理
Next i
※ 番号は、通し番号かつ1始まりであるという条件です。
No.4
- 回答日時:
No3です。
連投失礼。
Offsetの位置を間違えてしまっていました。
Offset(i - 1) が正しいですね。
No.2
- 回答日時:
No1です
も一度見たら無駄がありましたね。修正しておきます。
パターンは
reg.Pattern = "^(\d*)(~|~)?(\d*)$"
で十分でした。
ありがとうございます。
チェックのコードは不要です。
先ほどのお礼で書いておけば良かったのですが,行いたい処理は,以下のとおりです。
1,A列中の指定した範囲の通し番号と同じ行にあるD列の値をセル番地(X200)に上書きでコピペする。(VBAで処理。通し番号の最初,最後を入力するためのセルあり)
2,D列のIDごとに対応した表が関数等で作成される。(非VBAで処理)
3,作成された表を印刷(VBAで処理)
4,指定した範囲内の次の通し番号につき,上の1~3の処理を行う。(VBAで対応,do~whileの構文ですか?)
質問文では2番と3番の処理を省略してしまったため,上書きするのであれば最後の番号をコピペするだけで良いのではないかというご指摘を受けてしまいました。(3の処理のコードはおそらくわかります)
No.1
- 回答日時:
こんにちは
>順番にセル番地(X200)に上書き
マクロで「順番に上書き」すれば、最後の状態だけ残ります。
ですので、それだけが目的なら、最後の処理だけ行えば十分でしょう。
あるいは、質問文では省略されているだけで、順に何らかの処理を行いたいってことでしょうかね。
「3~5」のような入力値を扱うのは面倒なので止めた方が良いと思いますが、どうしてもやりたいのなら、まずは入力値のチェックをしましょう。
・「~」が1個以下である。
・「~」以外は全て数字である。
をチェックすることで、入力値は
「3」
「~5」
「3~」
「3~5」
のような形式になっていることまではチェックできます。
その上で、「~」を含む場合は
Split(入力値, "~")
で二つの数値部分を分解することができます。
(形式チェックを正規表現で行えば、チェックと同時に数値部分も取得できます)
一方の数値が省略されている場合は、通し番号の上限(または下限)で補完します。
同時に、入力した数値が通し番号の範囲内であることのチェックも必要ですね。
数値の範囲が決まれば、あとはVlookupでもよいですし、通し番号なら直接D列のOffsetでも参照できるでしょう。
以下は、正規表現を利用した場合の入力値チェックの簡単な一例です。
ご参考にでもなれば。
Dim reg As Object, m As Object
Const regn = "VBScript.RegExp"
Set reg = CreateObject(regn)
reg.Pattern = "^(\d+)?(?:(~|~)(\d+)?)?$"
Set m = reg.Execute(入力文字列)
この結果、
・m.count=0 なら入力形式が異なる(=マッチしない)
マッチする場合は
・m(0).SubMatches(0) に最初の数字文字列(省略の場合は空文字)
・m(0).SubMatches(1) に「~」の文字(ない場合は空文字)
・m(0).SubMatches(2) に右側の数字文字列 (省略の場合は空文字)
が得られますので、後はそれぞれの値を判断すれば良いことになります。
※ 入力値が空白の場合もマッチしますが、SubMatchesは全て空白になります。
※ 上記では「~」は半角文字、全角文字のどちらでも良いことにしてあります。
ありがとうございます。
ご回答いただいて申し訳ないのですが,入力値のチェックは不要です。
通し番号の最初と最後を入力するためのセルがあり,そこから取得することを考えています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelのマクロで、特定のセルから順番に値を取得したい 5 2022/12/06 15:34
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- その他(データベース) 伝票番号、品番、在庫としてマクロでもAccessでもデータ表を作りたいのですが、ご指導お願いします 1 2022/11/13 23:48
- Excel(エクセル) 【条件付き書式】countifsで複数条件を満たしたセルを赤くする方法 2 2023/02/09 23:53
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Excel(エクセル) Excel2007での条件付き書式について 6 2023/05/02 10:56
- Excel(エクセル) 条件付き書式 別のシートで色付けされたセルデータの転記漏れを防ぐ書式を入れたい 4 2022/04/22 06:36
- Visual Basic(VBA) セルに抜けた番号の代わりに空白を挿入する 4 2023/04/10 20:29
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Excel(エクセル) excelで検索した商品の画像(ネットワーク上の)を表示させたい。 3 2023/06/28 00:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字列になっている時間をVBAで...
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
エクセルで最初のスペースまで...
-
「B列が日曜の場合」C列に/...
-
2つのエクセルのデータを同じよ...
-
エクセル(勝手に太字になる)
-
エクセルの並び変えで、空白セ...
-
エクセル 文字数 多い順 並...
-
50人を数回、グループ分けする...
-
文字列に数字を含むセルを調べたい
-
エクセル 同じ値を探して隣の...
-
お店に入るために行列に並んで...
-
エクセルの表から正の数、負の...
-
Excel元に戻す方法を教えてくだ...
-
エクセルで文字が混じった数字...
-
Excel、市から登録している住所...
-
VBAで文字列を数値に変換したい
-
VBA 連続行データを5行ずつ隣の...
-
年が明けたら1年プラスされる...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
エクセルで最初のスペースまで...
-
2つのエクセルのデータを同じよ...
-
エクセル(勝手に太字になる)
-
「B列が日曜の場合」C列に/...
-
エクセル 文字数 多い順 並...
-
EXCELで 一桁の数値を二桁に
-
エクセル 同じ値を探して隣の...
-
VBAで文字列を数値に変換したい
-
エクセルの並び変えで、空白セ...
-
Excelで半角の文字を含むセルを...
-
エクセルで文字が混じった数字...
-
Excel、市から登録している住所...
-
A列がない・・・A列が非表示に...
-
エクセルの表から正の数、負の...
-
[関数得意な方]教えて下さい・...
-
エクセルの項目軸を左寄せにしたい
-
エクセル 時間帯の重複の有無
-
Excelにてある膨大なデータを管...
おすすめ情報