• 締切済み

VBA もし、数字が同じだったら

VBAで、もし D1とE1が同じ値(数字)だったら・・・ 行ごと削除という式を作りたいのですが Rangeを使うとエラーが出ます。 今のところD1とE1が同じなら・・・ D2とE2が同じなら・・・というように行は変数にしたいと 思っています。 どんな関数を使って式を組めばいいのでしょうか。

みんなの回答

回答No.1

使うのは、 代入= cells() if で、 手動の行削除を自動マクロ機能で記録、それを関数化する。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルVBAで数字の転記

    セルの数字の転記でTEST1のように繋がっているセル範囲は、その一つしたの値を一編に持ってこれます。 Sub TEST1() Range("C6:E6").Value = Range("C6:E6").Offset(1).Value End Sub ところがTEST2のように接してはいても繋がっていないとC15の一つ下の値がD14にも入ってしまいます。 Sub TEST2() Range("C15,D14").Value = Range("C15,D14").Offset(1).Value End Sub Range("C15,D14")あるいはRange("C15,E14")のようなとなりあっていない場合でも一個したの数値を一編に持ってくるような方法はないでしょうか?

  • VBAで列全てに式を入れたいんです。

    エクセルで 例えばセルA1,B1,C1を選択して 3つのセルの値をD1に値としてコピーする事は出来ませんか? A1,B1,C1はVBAで得た値です。 関数で1つにすると、もう一度コピーして値として 貼り付けなけねばなりませんので・・・ VBAは他の方に作成して頂いたので、 知識としてはありません。 VBAでの追加の仕方があればお教え下さい。 下記の回答を頂きまして 上手くいったのですが、 その式を、列全てで行うのはどうすればいいのでしょうか? 「 次のコードをEnd Subの上の行に挿入してください With Sheets("シート名") .Range("D1") = .Range("A1") & .Range("B1") & .Range("C1") End with 」 すみません。誰かお教え下さい。

  • VBAで「1」、「01」等を同じ数字とみなすには?

    エクセル2003です。VBAは初心者です。 ある列(Aとして)にデータがあって、A列をキーに昇順に並べ替えます。(1行目が見出し。) その後、2行目の値を基準値として、 ループで3行目から4行目、5行目…と順に値を見ていき基準値と比較して、 値が異なったら基準値でフィルタをかけて印刷し、 現在の値を新たな基準値として次のループを行う、 という処理を行っていました。 上記の時は数字4文字(0001、0100等)という前提だった為、空白や4文字の数字以外は 事前にチェックしてエラーメッセージを出していたのですが、 新たに「01」や「00001」も「0001」と同じ値として扱うことにしました。 この場合オートフィルタで「01」や「00001」と「0001」を同時に抽出する事は可能でしょうか? また無理な場合、どのような処理にすればよろしいでしょうか? 今の所、2つの値の文字数を取得(Len関数)し、 RIGHT関数で1文字取得。 1文字を比較して異なれば別とみなし印刷、 同じなら次はRIGHTで2文字取得して2文字を比較… これを少ない方の文字数分行う。 その後、文字数が多い方の文字列からLEFT関数で差分の文字数分取得し、 オールゼロなら同じとみなし、オールゼロでなければ別とみなす…。 という様な処理を作っている途中なのですが、 まずCOBOLのように、不特定な文字数の文字列に対して「ALLZERO」かどうかを見る 方法はあるでしょうか? また、処理が長引いているような気もするのですが、 これ以外に有効な方法はあるでしょうか? 教えていただけると助かります。 よろしくお願い致します。

  • 削除される行と、されない行があります

    VBAで、もしD列とE列が同じ数字ならその行を削除、 という式を作りました。なお、D列が0より大きいときに その式を適用するようにしました。 なぜか、D列とE鉄が同じ場合は、きちんと削除されるのに、 ある行だけ削除されません。 理由がわかりませんでした。 どのようなことが考えられますか。 D列もE列も半角で数字が入っていました。

  • エクセルVBA(値または文字の重複削除)

    先日まで何も出来ない状態でしたが、時間が出来たので、 またVBAを触り始めました。 質問はVBAで変数に代入されている値または文字の重複を削除したいのです。 セル範囲を取得し、変数に代入するまではいいのですが、 行列にまたがって範囲選択すると複数のセル位置(数値)が入ってしまいます。 例えば、D8からE9とD12からD13まで選択すると、変数の「セル位置」には「$D$8$E$8$D$9$E$9$D$12$D$13」が代入されますが、 $D$8=$E$8 $D$9=$E$9 数値の部分(内部は文字列ですが)が重なってしまいます。 これを、「$D$8$E$$D$9$E$$D$12$D$13」など数値(文字)のどちらかを削除出来ないものかと悩んでいます。 利用するのは数字の部分だけなので、その処理自体は問題ありません。 IF文でループさせて文字が存在するか見ているだけです。 また、比較自体も必ず偶数行だけですので、最後の「$」が無くても問題はありません。 For 始まり行 = セル開始行 To 入力行数 Step 2 If InStr(セル位置, "$" & Trim(始まり行) & "$") Then Exit For End If Next ただ、重複があるとそれも個数に含まれてしまい、計算がおかしくなります。 選択セル範囲の個数取得にはRange.Addressを使っています。 Dim rg As Range 'セル セル位置 = "" For Each rg In Selection セル位置 = セル位置 + rg.Address Next 縦1列なら大丈夫なのですが、複数列になると問題になります。 列行関係なく選択されたセルの行数が分かればいいだけなんですが・・・ 考え方だけでも構いませんので、よろしくお願いします。

  • エクセルVBAでのまとめ計算

     初めまして、よろしくお願いします。 データーで    A      B     C     D      E ・・・ 1              5     7      2 2              3     7      0 3 4              6     3      6 5              2     8      3 6              0     3      4 ・     ・      ・      ・      ・ ・     ・      ・      ・      ・ 100             3     4      5 という表がありますA列には(C列の値/(D列以降の平均値))をB列には(C列の値-(D列以降の平均値))を表示させたいと思います。たまに3行のような空白の行があります。関数式ではなく、VBAで解る方、よろしくお願いします。

  • VBAで処理フラグの立て方

    こういった条件でやりたいのですがうまくいきません・・・ 処理フラグの立て方は間違っていないと思うのですが・・・ ちょっとセルとかは変えてあります。 もしE3の値が4で割り切れたら8行目を削除し次の処理は行わない もしE3の値が4で割り切れなかったらE4の値が4で割り切れるか処理をする。 割り切れたら18行目を削除 E3とE4の値両方が4で割り切れなかったら8行目を削除し1行あがるので17行目を削除したいです Sub rdlt() If Range("I1").Value = 0 Then Range("I1").Value = 1 '処理は一度きり If Range("E3").Value Mod 4 = 0 Then Rows("8:8").delete '4で割れたとき8行目を削除 Range("J1").Value = 1 '4で割れたときは次の処理用にフラグ End If If Range("J1").Value = 0 Then 'E3が4で割れなかったときは処理する If Range("E4").Value Mod 4 <> 0 Then Rows("18:18").delete Range("J1").Value = 1 End If End If End If End Sub

  • 限りなく0に近い数字

    VC++にて、ある関数内に変数aを定義しました。 そのaには、初期値を設定しない状態で、プログラムを走らせました。 そして、aに値が設定される直前に、値を確認したところ、 2.8846128294914302e-290 となっていました。 この数字が何なのか、聞いたところ限りなく0に近い数字だと言われましたが、どういうことなのか分かりません。

  • VBAを見よう見まねで考えています。

     初めまして、当方全くの素人です。よろしくお願いします。 VBAで”D1へ値だけをコピーする”のは Range("D1").PasteSpecial Paste:=xlValues です。 VBAで”右方向へシフトさせてコピーする”のは Range("D1").Insert shift:=xlShifttoRight であることは解るのですが、”D1へ値だけ右方向へシフトさせてコピーする” のはどのような式になるのでしょうか。解る方、よろしくお願いします。

  • エクセル VBAについて。その2

    以前、こちらの掲示板でお世話になった者です。   Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address Case "$C$5" Select Case Target.Value Case 1 Range("C6").Value = 24 Range("D5").Value = 600 Range("D6").Value = 0 Range("E5").Value = 400 Range("E6").Value = 0 Case 2 Range("C6").Value = 32 Range("D5").Value = 1000 Range("D6").Value = 0 Range("E5").Value = 500 Range("E6").Value = 0 End Select Case "$D$5" Select Case Range("C5").Value Case 1 Range("D6").Value = (600 - Range("D5").Value) / 25 Case 2 Range("D6").Value = (1000 - Range("D5").Value) / 25 End Select Case "$E$5" Select Case Range("C5").Value Case 1 Range("E6").Value = (400 - Range("E5").Value) / 50 Case 2 Range("E6").Value = (500 - Range("E5").Value) / 50 End Select と、上記のようなマクロがお手伝いしていただいた結果、完成しました。 C5に1を代入した場合 D5 = 600 D6 = 0 E5 = 400 E6 = 0 C5に2を代入した場合 D5 = 1000 D6 = 0 E5 = 500 E6 = 0   C5に1を代入しており、D5の値を500に下げた時 D6 = 4 (D5の値を100下げる毎にD6の値に+4 ) (D5の値を100上げる毎にD6の値に-4 ) C5に1を代入しており、E5の値を300に下げた時 D6 = 4 (E5の値を100下げる毎にE6の値に+4 ) (E5の値を100上げる毎にE6の値に-4 ) <以下、C5に2を代入した時のケースを省略。>   というような意味合いのマクロになったと思いますが、少々困ったことが発生しました。 (D5の値を100下げる毎にD6の値に+4 ) (D5の値を100上げる毎にD6の値に-4 ) (E5の値を100下げる毎にE6の値に+4 ) (E5の値を100上げる毎にE6の値に-4 ) この部分を (D5の値を100下げる毎にD6の値に+4 ) (D5の値を100上げる毎にD6の値に-8 ) (E5の値を100下げる毎にE6の値に+4 ) (E5の値を100上げる毎にE6の値に-8 ) に変更したいのですが、計算式がわかりません(?ω?) どなたかご指導のほどよろしくお願いします。

このQ&Aのポイント
  • 新しいパソコンに古いパソコンからメールアドレスを移したい場合、NECの引っ越しソフトを利用してファイルを移送することができます。
  • しかし、引っ越しソフトではメールアドレスの移行はできないため、別の方法を使う必要があります。
  • メールアドレスの移行方法は、メールサービスによって異なりますので、具体的な方法については各メールサービスのサポートページを参照してください。
回答を見る

専門家に質問してみよう