Apple IDログイン機能メンテナンスのお知らせ

.
 excelの一つの行に、仮にA行にデータがずらりと並んでいます。
 そのデータの並びのうち、同じデータが2つ以上並んでいる部分を検出したい。
 それは関数EXACT(文字列,文字列)を使えばよいですね。
 =EXACT(A1,A2) とB1セル(じゃなくても良いか)に入力して、コピーしてB2セル以下にだああああっとペーストすれば良いですね。簡単です。

 然しこれをシートじゃなく、VBAでやりたいのですが、=EXACT(セル番号,セル番号)のセル番号の指定の仕方が分かりません。

 ご教示願います。

 よろしくお願いいたします。

 以上

A 回答 (3件)

こんにちは



例えばB1:B10に入力する場合なら、
 Range("B1:B10").FormulaLocal = "=EXACT(A1,A2)"
で良いです。
(アドレス変換はエクセルがやってくれます)

あるいは、R1C1形式の式にしておけば、同じ式ですみますね。
    • good
    • 1
この回答へのお礼

fujillinさん、ありがとうございます。

 上記でできることは分かったのですが、困ったことがありまして。
 一覧表からカードを作るプログラムを作っているのですが、作るカードの方で、EXACTによる比較が必用なのですが、その比較する縦に並んだデータは、縦に結合したセルなのです。
 なので実行すると、1回の比較ごとに「セルを結合すると、左上の値のみが保持され、他のセルの値は破棄されます」というダイアログボックスが出て、[OK]と[キャンセル]のボタンがあり[OK]ボタンを押さないと先に進めません。カード数が500枚なら500回[OK]ボタンを押さないと先に進めません。
 これでは自動になりません。

 然し、これも一工夫で何とかなるかな?と考えております。

 一工夫してみます。

 有り難うございました。

お礼日時:2022/04/14 22:14

No1です



>なので実行すると、1回の比較ごとに「セルを結合すると、左上の値のみが
>保持され、他のセルの値は破棄されます」というダイアログボックスが出て~
どういう処理をしているのか不明ですが、No1のコードでアラートが表示されることはないはずです。
ですので、他の処理でそのアラートが出ているものと推測します。

通常そのようなアラートが出るのは、「セルを結合させ」ようとした場合ですので、どこかでセルを結合させるような記述をしていないでしょうか?
アラートが出るのを防ぎたければ、アラート表示を停止させれば可能ですけれど、穴の開いた布にパッチをあてて回るようなものなので、応急処置は別として、初めからきちんと整理した処理を考えるべきでしょう。


ついでながら、そもそもになってしまいますが・・・
何をなさろうとしているのかがわかりませんけれど、ご質問のような比較にわざわざEXACT関数をセルに設定するようなことも、普通はめったに行わないものと想像します。
なぜなら、VBAで直接セル値を比較すれば、それで事足りてしまうからです。
ご質問の方法だと、いずれはその結果を読みに行かなければならないので、「関数の設定」、「結果の読み取り」、「関数の削除(←必要な場合は)」と何通りもの処理を行わうことになり、返って手間が掛かることになりかねません。

ご質問内容が、「関数の設定の仕方」でしたので、そのままそちらで回答しましたけれど、「なさりたいこと」をきちんと整理した上でご提示いただければ、もう少し要領のよさそうな方法を回答できるかも知れません。
    • good
    • 1
この回答へのお礼

fujillinさん、再び有り難うございます。

 私のやりたい事は、上下に隣り合っているセルの中身を比較して、その結果を表示したいだけです。
 その為には、EXACT関数を使うしか方法が無いと思っていました。

>VBAで直接セル値を比較すれば、それで事足りてしまうからです。

 数値以外ではそれは出来ないと思っていました。
 やり方ご教示いただけますと幸いです、甘えすぎだとは思っておりますが。

 ありがとうございました。

 以上

お礼日時:2022/04/14 23:26

(´・ω・`)?


A行?
ひょっとして、それは
A列
の間違いでしょうか。

・・・本題・・・

ワークシート関数のパラメータにセルを指定するやり方は共通です。
EXACT関数に限った話ではありません。
 Exact( Range("A1") , Range("A2") )
 Exact( Cells(1,1) , Cells(2,1) )
のようになります。


・・・余談・・・

ええと、繰り返し処理をする場合、VBAでは範囲を指定しなきゃならない。
 For Next
などの構文を使って繰り返し処理をする必要があります。
 For i=1 to 5
  繰り返し処理する命令
 Next
のようにして使います。(これは5回繰り返す例)

質問のケースでは変数「i」を使ってセルを指定することになるので
”Range" よりも ”Cells” のほうが便利でしょう。

・・・

もしも関数をセルに埋め込みたいのであれば、
 Range.Formula
 Cells.Formula
といったプロシージャを利用できます。
 Range("B1").Formula = "=EXACT(A1:A2)"
 Cells(1, 2).Formula = "=EXACT(A1:A2)"
のように文字列を指定して使います。
    • good
    • 1
この回答へのお礼

銀鱗 さん、ありがとうございます。

 教えていただき感謝いたします。
 憶えておきます。

 ありがとうございました。

 以上

お礼日時:2022/04/22 08:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A