• ベストアンサー

EXCELのVBAで循環参照について

anotu_kageの回答

回答No.1

Sub a() If cells(1, 1).Value < cells(1, 2).Value Then cells(1, 2).Value = cells(1, 1).Value End If End Sub -------------- こんな感じじゃだめなんですかね?

QAZ123
質問者

お礼

回答ありがとうございます。 最初に1回だけVBAで比較の処理を行い、それ以降はA1セルに手入力をしてB1のセルの値をかえさせたいので、EXCELの数式で処理を行いたかったのです。 質問が不明瞭で申し訳ありません。

関連するQ&A

  • エクセルVBA 変数定義とループ条件

    エクセル2003を使用しています。 普段は他の人が書いたソースを見て修正して使用する程度なのですが、今回 初めて一から作成しようとしております。以下のような動きです。 ○条件 sheet1~sheet3までの3シート。各シートの一番上は項目行。 sheet1とsheet2のみデータがあり、sheet3は項目行のみ。 ○動作 ・sheet1のC2とsheet2のC2を比較し、同じだったらsheet3の2行目にsheet1のA2,B2,C2を挿入。 続けて、その右側にsheet2のA2,B2を代入。(sheet3のA2~E2までが埋まることになります) ・比較した値が間違っていたらsheet3はいじらない。 ・次に、sheet1のC2とsheet2のC3を比較し、同じであれば値をsheet3のひとつ下の行に代入していく。(今度はA3~E3) ・Sheet1のC列とSheet2のC列の全ての組み合わせで比較をしていく。 このような動作をするため、 If Sheet2.cells(2,2) = sheet1.cells(2,2) then Sheet3.cells(2,1).value = sheet1.cells(2,1) Sheet3.cells(2,2).value = sheet1.cells(2,2) Sheet3.cells(2,3).value = sheet1.cells(2,3) Sheet3.cells(2,4).value = sheet1.cells(2,1) Sheet3.cells(2,5).value = sheet1.cells(2,2) End If まずこのような形を作って動かしたら、一番最初の行については比較、値の代入ができました。 ここで、これをループさせて上記条件の動作をさせたいのですがどれを変数にし、どのようにループさせたらいいかが見当がつきません。 分かりづらいかもしれませんがご回答いただければ幸いです。 よろしくお願いいたします。

  • VBAで関数式を入力させて行きたい。(ループ処理)

    すみません。誰か教えて頂けませんか。 D列の3行目以下に、B列の値に2を足す関数式を記述したいと 思っています。 B列に値が入っていれば、式を入れていきたいのですが、 ループ処理で式を入れていく方法があれば、ご教授頂けませんでしょうか。 宜しくお願いします。 Last_Row = Cells(Rows.Count, 2).Row for a = 3 to Last_Row if Cells(a,2).Value <> "" then 'D列に式代入 End if Next a [D3].Formula = "=R3C2+2" [D4].Formula = "=R4C2+2" [D5].Formula = "=R5C2+2" [D6].Formula = "=R6C2+2" [D7].Formula = "=R7C2+2"

  • Excel VBAのFormulaでアプリケーションエラーが発生。

    Excel VBAのFormulaでアプリケーションエラーが発生。 フォーマットが統一された複数のExcelBookから特定の値を別のbookに一覧化するマクロを作成中ですが、エラーで止まり原因も分かりません。 for文で回してますが、エラーとなったコードをほぼそのまま書くと下記のような形です。 Cells(i, j).Formula = _ "=[" & Cells(i, 3).Value & "\]test!" & Cells(2, j).Value 上記の文字列「test」はbookのシート名です。 Cells(i, 3).Valueには  「C:\tmp\testbook.xls」 のようなbookのパスを Cells(2, j).Valueには  「A1」 のようなセル位置の文字列を記載し、  ='C:\tmp\[testbook.xls]test'!$A$1 という関数を代入したいのですが冒頭の通り、エラーで先に進まず原因も不明です。 対処方法を教えて頂ければと思います。 上記の関数をExcelに貼り付ければちゃんと値を表示します。 また、VBAのウォッチウィンドウでも関数は認識している様ですが、 Excelへの代入だけできません。 ちなみにCells(i, j).FormulaではなくCells(i, j).Valueでもダメでした。 非常に困っています。よろしくお願いします。

  • エクセルVBA 対比表を作りたいです。

    お世話になります。混乱を極めてしまったので、質問させて頂きます。 下記の様なリストがあります。 A列  B列 No  相手 1   1 1   2 1   3 1   5 2   1 2   2 3   2 3   3 3   4 ・  ・ ・  ・ ・ 以下、数百まであります。 上記で 「1-2」と「2-1」はありますが、「1-3」はあるけど「3-1」がありません。 (その他「1-5」無いなどです。上記は一例としてます。) この場合「1-3」の部分の「1」を「0」などに置き換えたいのですが、下記コードを 書きましたが、上手く目的の結果にたどり着けない状態になっております。 (同じ部分を検索しているだけになってしまっていて。。。) 下記はユーザーフォームからのコードになりますので、ListBoxの記載ありますが、 選択されているListBoxの値で非一致を探すって形にしようとしております。 For Each KRR In Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row) If KRR = ListBox1.List(ListBox1.ListIndex, 0) Then SDF = Cells(KRR.Row, 2) For Each SRR In Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row) If Cells(SRR.Row, 1) = SDF Then SSDF = 1 End If Next If SSDF <> 1 Then Cells(KRR.Row, 1) = 0 End If SSDF = 0 End If Next 要するにA列とB列を反対にした状態で、一致する値が無い場合は、対象CellのA列に「0」を 代入したいって事を考えております。 完全に混乱してしまっているので、お助け下さい。。。

  • VBAでのセルの参照

    VBAであるセルの値をCSV出力にしようしたいと思っています。 対象セルが、ただ値のみが入っているセルならば問題ないのですが、式が入っているセルですと上手くできません。 詳細は以下のとおり セルA1:8.25  セルA2:8.80   セルA3:=A1-A2 (画面には-0.55と表示)で 変数=Cells(3,1).Valueと言った形で、A3の値を変数に受け取ろうとしています。 すると変数には入るべき値の近似値(-0.54999999・・) が入ります。 すべてのセルの書式は数値で、少数第2位までに設定されており、決して上記以外の値が入っていることはありません。 何故、このような現象が起こり、またどうすれば解決できるのでしょう? ちなみに変数=Cells(3,1).Textにすると正しい値(-0.55)が入ります。 .Valueと.Textの違いも教えていただけるとあり難いです。 宜しくお願いします。

  • Excelの循環参照について

    ご回答お願いします Excelで セルA1の値が「=IF(A2=A2,1,0)」 セルA2の値が「=IF(A1=A1,1,0)」 の時、循環参照になってしまうのは何故ですか? 反復計算をしなくても、IF関数は必ず真になると思うのですが。

  • Excel VBA教えてください

    Excel シート1のA2~E2に数字を入力します A4~E4に A2*10・B2*10・・・と A5~E5に A2*15・B2*15・・・と計算式がはいっています A4~E4の結果とA5~E5の結果をA10~E10以降に代入します ただA2~E2の数字は毎回変わるので履歴を残したいです 下記のプログラム何処を直せばよいですか? Private Sub CommandButton1_Click() Dim LastR As Long LastR = Range("A65536").End(xlUp).Row + 1 If LastR < 10 Then LastR = 10 Range(Cells(LastR, "A"), Cells(LastR, "E")).Value = Range("A4:E5").Value End Sub

  • エクセル2007 参照セルの値が認識されない

    エクセル2007の環境で下記マクロを実行すると、 アクティブシートのセルA1に数字が入っている場合、Sheet1のセルA1に値を転記しても そのセルA1の値をVLOOKUP関数で参照できません。 マクロに問題があるためなのか何処に問題があるのか分からないので教えてください。 宜しくお願いいたします。 【sheet】は アクティブシートの3行目から1000行目までのA列のセルをクリックしたらセルA1に値を表示 その後、下記【モジュール】を使用し、 アクティブシートのセルA1が空白の場合、 A列の数値をSheet1のセルA1に転記し、アクティブシートのA列の数値が空白になるまで循環する。 Sheet1のセルA1の値をVLOOKUP関数で参照した内容を表示、印刷します。 ----------------------------------------------------------------- '【sheet】 Private Sub Worksheet_SelectionChange(ByVal Target As Range) With Target If .Count > 1 + IsEmpty(.Value) Then Exit Sub If Application.Intersect(.Cells, Range("A3:A1000")) Is Nothing Then Exit Sub ActiveSheet.Cells(1, 1).Value = .Value End With End Sub ----------------------------------------------------------------- '【モジュール】 Sub TEST() Dim myBtn As Integer Dim myMsg As String, myTitle As String Dim WS1 As Worksheet, WS2 As Worksheet Dim i As Long myMsg = "●●●" myTitle = "確 認" myBtn = MsgBox(myMsg, vbYesNo + vbExclamation, myTitle) If myBtn = vbYes Then Set WS1 = ActiveSheet Set WS2 = Sheet1 If WS1.Cells(1, 1).Value = "" Then With WS1 For i = 3 To 65536 If .Cells(i, 1).Value = "" Then Exit For WS2.Cells(1, 1).Value = .Cells(i, 1).Value WS2.Cells(1, 2).Value = ActiveSheet.Name 'WS2.PrintOut Copies:=1 Next i End With ElseIf WS1.Cells(1, 1).Value >= 1 Then WS2.Cells(1, 1).Value = WS1.Cells(1, 1).Value WS2.Cells(1, 2).Value = WS1.Name 'WS2.PrintOut Copies:=1 Else End If End If End Sub -----------------------------------------------------------------

  • エクセルVBA

    A列を基準にBC列が空白ならAの数値を入れて、A>BならB列を更新、A<CならC列を更新 A列が数値以外ならその行をスキップ、という処理をしたいのですが Option Explicit Dim A As Range, B As Range, C As Range Dim i As Long Sub test() For i = 1 To 10 Set A = Cells(i, 1) Set B = A.Offset(0, 1) Set C = A.Offset(0, 2) If IsNumeric(A) Then Else Exit Sub End If If B.Value = "" Then B.Value = A.Value If C.Value = "" Then C.Value = A.Value If A.Value > B.Value Then B.Value = A.Value If A.Value < C.Value Then C.Value = A.Value Next i End Sub とすると数値以外の行の時点で停止してしまいます。 その行を飛ばして次の行に進むにはどうしたらいいのでしょうか?

  • エクセルのVBA、ループ処理について

    if文とループ処理をどう組み合わせればいいのかわかりません 以下のコードで、iの数をを増やしていく処理を行いたいのですが、エラーがでてしまいうまくいきません どのように書けばいいのでしょうか 教えてください For i = 2 To 11 If Cells("4,i") > 80 Then Cells("5,i").Value = "A" ElseIf Cells("4,i") > 70 Then Cells("5,i").Value = "B" ElseIf Cells("4,i") > 60 Then Cells("5,i").Value = "C" Else Cells("4,i").Value = "D" End If Next