E列に入力する関数でも、マクロでも良いので、E列にフラグを立てるようにしたいです。
複雑でうまく説明出来ていないかも知れませんが、どうぞよろしくお願いいたします。
1. C列が「C'」から始まるものがあれば、その行のセルAを見る。
2. A列に同じ数字がないか探す。あった場合、その行のセルCが何の文字から始まるかを見る。
3. そのセルCが、"A","B","D","E","F"で始まる場合、1.で最初に見たC'から始まるセルCと
同じ行のセルEに、セルCの値を入れる。
【実行前】
A列 B列 C列 D列 E列
222 AAAA C'あああ ABC
222 HHHH Bととと QWN
333 GGGG ウウウ DGG
111 BBBB C'ううう FUI
444 CCCC C'えええ KOL
444 KKKK C'おおお MYT
444 LLLL C'おおお REF
999 DDDD イイイ VGC
777 EEEE C'ききき XSH
777 UUUU Fかかか ZOL
【完成イメージ】
A列 B列 C列 D列 E列
222 AAAA C'あああ ABC C'あああ
222 HHHH Bととと QWN
333 GGGG ウウウ DGG
111 BBBB C'ううう FUI
444 CCCC C'えええ KOL
444 KKKK C'おおお MYT
444 LLLL C'おおお REF
999 DDDD イイイ VGC
777 EEEE C'ききき XSH C'ききき
777 UUUU Fかかか ZOL
No.5ベストアンサー
- 回答日時:
merlionXXです。
補足をみました。
> どの部分を修正したらよろしいでしょうか?
こういうことかな?
Sub test02()
Dim myV
Dim myStr As String, i As Long, n As Long
myV = Range("A1:E1", Range("A1:E1").End(xlDown)).Value
myStr = "ABDEF"
For i = 1 To UBound(myV)
If Left(myV(i, 3), 2) = "C'" Then
For n = 1 To UBound(myV)
If myV(i, 1) = myV(n, 1) Then
If InStr(myStr, Left(myV(n, 3), 1)) > 0 Then
myV(i, 5) = myV(i, 3)
myV(n, 5) = myV(n, 3)
End If
End If
Next n
End If
Next i
Range("A1").Resize(UBound(myV), UBound(myV, 2)).Value = myV
End Sub
出来ました!!
本当に助かりました。補足の質問にも答えていただき、感謝しております。
merlionXXさん、この度は本当にありがとうございました。
No.6
- 回答日時:
参考。
事例では、A列がある程度固まって並んでいます。
実際はどうでしょう?。
222 AAAA C'あああ ABC C'あああ
333 GGGG ウウウ DGG
111 BBBB C'ううう FUI
222 HHHH Bととと QWN
念のため、上記みたいな並びはありますか?。
>For i = 1 To UBound(myV)
C列が「C'」から始まるものがあれば・・・の検索
>For n = 1 To UBound(myV)
A列に同じ数字がないか探す、の検索
例えば、1000行あれば、
1行目のC列に見つかれば1~1000まで探す、
3行目のC列に見つかればまた1~1000まで探す、
みたいなことになってます。
A列の単位で並べられていて、同じものが離れていないのであれば、
A列の値が変われば探す必要なし、となるので
処理は今より早くなります。
111
222
222
333
444
444
444
777
777
999
みたいに。
>InStr(myStr, Left(myV(n, 3), 1)) > 0
文字が存在するかチェックです。
あればその位置を返しますから、>0は存在したことを意味する。
「"A","B","D","E","F"で始まる場合」に使ってます。
自己解決できないのであれば、
長い関数やコードを提示してもらった場合は、説明ももらうようにしないと
また悩むことになりかねないです。
No.4
- 回答日時:
C列の判定
A列の判定
でもって
E列に何かセットしなければならないだろう、というのは絞られて来ます。3分の1以下くらいでは?。
それでも関数やマクロでしょうか?。
A列にあるか探す、無駄が起きる操作です。
大量だから関数やマクロかもしれませんが、作業情報列作るとかした方がわかりやすいです。
関数、判定が合っているか?、はわかるようにしておくこと。見てなにやっているか後々わかりにくい。
並べ替えるとかは考えないですか。333や999は関係ないとわかってますから工夫できないか?。
No.3
- 回答日時:
関数では思いつきませんのでマクロにしました。
標準モジュールに書いてください。
表はA1からあるものとします。
一例です。
Sub test01()
Dim myV
Dim myStr As String, i As Long, n As Long
myV = Range("A1:E1", Range("A1:E1").End(xlDown)).Value
myStr = "ABDEF"
For i = 1 To UBound(myV)
If Left(myV(i, 3), 2) = "C'" Then
For n = 1 To UBound(myV)
If myV(i, 1) = myV(n, 1) Then
If InStr(myStr, Left(myV(n, 3), 1)) > 0 Then
myV(i, 5) = myV(i, 3)
End If
End If
Next n
End If
Next i
Range("A1").Resize(UBound(myV), UBound(myV, 2)).Value = myV
End Sub
この回答への補足
回答ありがとうございます。
merlionXXさんに作って頂いたマクロで、無事処理が出来ました!!
本当に助かりました。ありがとうございました。
すみません、追加で教えて頂けるとありがたいのですが、
3. そのセルCが、"A","B","D","E","F"で始まる場合、1.で最初に
見たC'から始まるセルCと同じ行のセルEに、セルCの値を入れる。
という部分を
3. そのセルCが、"A","B","D","E","F"で始まる場合、E列に
セルCと同じ値を入力する。
(C'から始まる行だけでなく、"A","B","D","E","F"で始まる行にも
セルCと同じ値を入れたいです。)
というように修正する場合、merlionXXさんに作って頂いたマクロの
どの部分を修正したらよろしいでしょうか?
お手数をおかけしますが、よろしくお願いいたします。
新 【完成イメージ】
A列 B列 C列 D列 E列
222 AAAA C'あああ ABC C'あああ
222 HHHH Bととと QWN Bととと
333 GGGG ウウウ DGG
111 BBBB C'ううう FUI
444 CCCC C'えええ KOL
444 KKKK C'おおお MYT
444 LLLL C'おおお REF
999 DDDD イイイ VGC
777 EEEE C'ききき XSH C'ききき
777 UUUU Fかかか ZOL Fかかか
No.2
- 回答日時:
セル式で作るのは無理だと思います。
途中でループが入るし。1. C列が「C'」から始まるものがあれば、その行のセルAを見る。
単純なIF判定。一致しなければ、2、3は飛ばす。
ただし、ここで必要な情報は全て持つ必要あり。(2、3に影響)
2. A列に同じ数字がないか探す。あった場合、その行のセルCが何の文字から始まるかを見る。
最初から、もしくは特定位置からループで総ナメしてチェック。
3. そのセルCが、"A","B","D","E","F"で始まる場合、1.で最初に見たC'から始まるセルCと
同じ行のセルEに、セルCの値を入れる。
2のループ内でIF判定。1で取得した値等を使用
あと、1~3までを全行分、回すループで囲む必要有り。
参考まで。
No.1
- 回答日時:
E1セルには次の式を入力し下方にオートフィルドラッグします。
=IF(LEFT(C1,2)<>"C'","",IF(SUMPRODUCT((A$1:A$1000=A1)*(LEFT(C$1:C$1000,1)="A"))+SUMPRODUCT((A$1:A$1000=A1)*(LEFT(C$1:C$1000,1)="B"))+SUMPRODUCT((A$1:A$1000=A1)*(LEFT(C$1:C$1000,1)="D"))+SUMPRODUCT((A$1:A$1000=A1)*(LEFT(C$1:C$1000,1)="E"))+SUMPRODUCT((A$1:A$1000=A1)*(LEFT(C$1:C$1000,1)="F"))>0,C1,""))
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBAで重複データを合算したい(時間) 1 2022/12/08 23:06
- Visual Basic(VBA) 先頭と末尾を指定して連続した数字を入力 1 2022/09/14 13:12
- Excel(エクセル) 列の複数ある空白セルを飛ばして、セルに並べて表示したい 3 2023/02/12 16:49
- Excel(エクセル) Excel2019 列と列(2列)の数値の重複を調べたい 1 2023/05/11 13:35
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- Visual Basic(VBA) エクセルVBAで『A列』に新規で数値を入力し『B列』から右方向の空白セルにその値を貼り付ける方法 4 2022/11/05 08:37
- Visual Basic(VBA) エクセルVBAについて 2 2023/01/31 16:21
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
- Excel(エクセル) 名前と日付が一致する箇所にフラグを立てる関数が知りたいです 4 2022/08/11 02:24
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【スプレドシート】IMPORTRANGE...
-
英数字のみ全角から半角に変換
-
会社PCのメールが更新されない
-
マイクロソフト 一時使用コード...
-
Outlook で宛先が複数の場合の人数
-
【スプレッドシート】指定の日...
-
Microsoft Formsの「個人情報や...
-
Microsoft Edgeの「ニュースと...
-
VLOOKUP関数について
-
【Excel VBA】PDFを作成して,...
-
エクセルでXLOOKUP関数...
-
outlookのメールが固まってしま...
-
teams設定教えて下さい。 ①ビデ...
-
Microsoft365で写真をアルバム...
-
Microsoft Officeに似たキング...
-
会社におけるOfficeライセンス...
-
【スプレッドシート】白色のセ...
-
Excel VBA 日程表からスケジュ...
-
VBAファイルの保存先について
-
エクセル、ワード、ネット検索...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【スプレドシート】IMPORTRANGE...
-
マイクロソフト 一時使用コード...
-
英数字のみ全角から半角に変換
-
Office2021を別のPCにインスト...
-
Microsoft Formsの「個人情報や...
-
officeビジネス型のワードやエ...
-
会社PCのメールが更新されない
-
【スプレッドシート】指定の日...
-
Microsoft Officeを2台目のPCに...
-
何このステータスバー
-
2つのシートの一致する行のセ...
-
会社のTeamsのことで相談です。...
-
エクセルにリンクされるのをし...
-
Windows 11で、IME言語バー(IM...
-
office2010とoffice365の共存で...
-
Microsoftのパソコンです。 エ...
-
エクセルでXLOOKUP関数...
-
Excel関数について質問ですm(__)m
-
VBA
-
自分の専門分野の仕事。初見で...
おすすめ情報