• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:A列文字とE列文字を比較してG列に判定を出力する)

A列文字とE列文字を比較してG列に判定を出力する

このQ&Aのポイント
  • エクセルマクロ初心者の質問です。A列に入力されている文字とE列に入力されている文字を比較し、G列に一致・不一致の判定を出力するマクロを作成したいと考えています。ただし、A列の行数が少ないため、A列を基準にE列を比較し、A列が空白行に移った段階で処理を停止したいです。
  • 比較にはStrComp関数を使用しようと考えていますが、同じ行を参照してしまうことが問題です。現在、以下のコードを考えています。
  • jを1からA列の最終行まで繰り返し、StrComp関数を使用してA列とE列を比較し、結果をG列に出力します。結果が一致した場合はK、そうでない場合はFを表示します。ただし、処理がA列の空白行に移った段階で処理を停止するようにしたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

いまE列の最後行までfor nextを廻しているのを,単純にA列最後行までと書き換えるだけです。 sub macro1() dim i as long for i = 1 to cells(rows.count "A").end(xlup).row ’Aの最後まで cells(i, "G") = iif(strcomp(cells(i, "A"), cells(i, "E"), vbtextcompare) = 0, "K", "F") next i end sub

vesper580109
質問者

お礼

keithinさん ご回答ありがとうございました。 問題なく解決できました。 行全体の指定方法”A”、”E”、”G”と、Strcompの戻り値の扱いを一行で表現できる所が大変勉強になりました。 ありがとうございました。

その他の回答 (3)

  • kkkkkm
  • ベストアンサー率66% (1725/2595)
回答No.4

keithinさんのコードだと同一行の値の検査しかしていませんし、A列が1から10行だった場合E列の10行目以降は検査対象になっていませんが、よろしいのでしょうか。 たとえば A1とB1にaと入力して E3とE4にaと入力して コードを実行すると G1とG2にはFと表示されます vesper580109さんはこの場合、Kと表示させたいのだろうと思ったのですが違いましたでしょうか。もしそうだとしたら、思った結果ではない状態で作業を進める事になると思い、追加の回答をさせていただきました。

vesper580109
質問者

お礼

kkkkkmさん。 追加のご回答ありがとうございます。 ご両名のご回答内容を自分なりに勉強し、keithinさんの回答がkkkkkmさんのご指摘のとおりとなっていたことを理解しております。ご回答頂いたものをそのまま使用する・・だけでなく、その書かれている意味や内容を理解することが大切だと思い、"A"を”E”に変えてみたりいろいろいじってみて、回答頂いたコードがどのように動くか・・を試してみました。 1つの結果を導くのに、いろんな書き方があることを今回特に勉強させていただきました。 お手数をおかけしました。本当にありがとうございます。

  • kkkkkm
  • ベストアンサー率66% (1725/2595)
回答No.3

Sub Exampel() Dim j As Long For j = 1 To Cells(Rows.Count, "A").End(xlUp).Row If WorksheetFunction.CountIf(Range("E:E"), Cells(j, "A")) > 0 Then Cells(j, "G") = "K" Else Cells(j, "G") = "F" End If Next j End Sub こういうことでしょうか。

vesper580109
質問者

お礼

mt2008さん ご回答ありがとうございました。 問題なく結果出力できました。 今回はkeithinさんの回答をベストアンサーにさせて頂きたくご了承下さい。 マクロの処理時間がkeithinさんの方が早かった事があげられます。 記述方法でいろいろ変わってくるのは、初心者なりに何となく分かってはいましたが、 もっと勉強しないといけないなと思っています。 ありがとうございました。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

説明を勘違いしているかもしれませんが、E列の文字列がA1:A10に存在していれば「K」、存在していなければ「F」をG列に表示するという事でしょうか? でしたらこんな感じで良いかも。 Range("G1:G1000").FormulaR1C1 = "=IF(COUNTIF(R1C1:R10C1,RC[-2])>0,""K"",""F"")" Range("G1:G1000").Value = Range("G1:G1000").Value

vesper580109
質問者

お礼

mt2008さん ご回答ありがとうございました。 解釈頂いた内容で合っており、結果出力できました。 今回はA列、E列共に、何行目まで文字が入っているのか分からない部分でつまづいていました。 何行目までという範囲指定ではなく、列全行を比較範囲にしたかったという意図がありました。 まだ初心者なので、いろんな記述方法を勉強していきたいと思います。 ありがとうございました。

関連するQ&A