• 締切済み

マクロCellsがわからなくて困っています

マクロのCellsについて、夜も眠れないほど悩んでいます。 助けてください。 相談は以下です。 Cells(1,1).Select の行、列部分に、他のセルに入力済みの数値を指定したり、算出することはできますか? たとえば、あらかじめセルに数値が入っていたら Cells(1,A1).Select Cells(1,B1-A1).Select のように。(誤った文章ですが・・・) またこの方法に使えるCells以外の言葉があれば、教えてくださいませ!

みんなの回答

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.4

>今日作ってみた文も、1004エラーで頓挫しました。 「行番号回分 = A3」って平気で書いてますが、貴方は質問の回答から何を学んだのでしょう? ちゃんと理解されたなら問題無く動くように書けるはずですよ。 ちょっと厳しい言葉かも知れませんが、これじゃ、何も学んでないと同じですね。 もう一度書きますが、ワークシートの関数の記述とVBAの記述は異なります。 任意のセル指定する場合は、必ず Range()やCells()を使う必要がありますよ。 >なにせ、これが気になって他の仕事が手につきません。 全ては基本が身についていないからです。 適当に端折って書いても動かないのがプログラムですから、正しい記述を覚えて下さい。

ROSA63
質問者

補足

あっ、誤解されました。わたしは昨日、自力でこの文を作り、エラーで行き詰まり、もう寝ようーと思ったときに、いただいた コメントをはじめて読んだのです。 それで、あっ、良かった、じゃ明日Renge と Cells を組み合わせてやってみよう!と思い、補足コメントを入れて寝たのです。 変なマクロ文は入れなきゃ良かったですね。決していただいた アドバイスを軽視して作った結果がこの文ではありません。誤解まねいてすみませんでした。 経過報告です。 Renge と Cells を組み合わせて、無事表示まではこぎつけることができました。 私もその他の操作者もマクロ初心者なので、改造の場合のリスクも考え、マクロで全部やらずに、エクセルシートの上に引き算式を表示した上で、短い文にしました。 でも表示場所を変えると エラーになってしまうので、あとは力技でコツコツやります。 皆様アドバイスありがとうございました!!

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.3

>Cells(1,B1-A1).Select ワークシートの関数に使うセル指定と同じ方法では認識しません。 マクロの決まりでは、Range("A1") のように書かないとセルの値を取得出来ません。 値を直接記入する以外に、計算式や変数を使う事も出来ます。 Cells(1,Range("B1") - Range("A1")).Select として下さい。 SET1=Range("B1") - Range("A1") Cells(1,SET1).Select のような方法もあります。

ROSA63
質問者

お礼

アドバイスありがとうございました。 昨夜自力で作ったのがこの変な文で、その後アドバイス見てをそれを元に、今日会社で作り、うまく運びました。 先に自力で作った変な文つけたんで誤解まねきましたね。相談箱の利用も慣れてないので、失礼もあったかと思います。

  • dumbass
  • ベストアンサー率60% (69/114)
回答No.2

No.1です。 質問を誤解してました。↓のは忘れて下さい。 Cellsの中にまたCellsやRangeを入れ子すれば出来るはずです。  Cells(1,Range("A1").Value).Select  Cells(1,Range("B1").Value-Range("A1").Value).Select みたいな感じで。

ROSA63
質問者

お礼

dumbassさんありがとうございました! 昨夜は自力試行錯誤でトライしたものの頓挫して、寝る前に相談箱みたら、いくつかコメントがきていて、「ヤッター天の助け」と思いとりあえず疲れてたので寝ました。 コメント文を携帯に転送しておいて、出社バスの中で読み午後にトライしてみました。 私もその他の操作者もマクロ初心者なので、改造の場合のリスクも考え、引き算式はエクセルシートの上に引き算式を表示しました。マクロは短い文にしました。 でも表示場所を変えると エラーになってしまうので、あとは力技でコツコツやります。 たすかりました!

  • dumbass
  • ベストアンサー率60% (69/114)
回答No.1

Rangeを使えばセルを指定できますヨ。

参考URL:
http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_070_10.html
ROSA63
質問者

補足

おふたりとも、ありがとうございます。なるほどっ、Cell 1とRangeの組み合わせで工夫してみます。 列、行とも変数なのです。 なにせマクロは年末からはじめたばかりで、自力で書けず、サンプルの継ぎはぎ状態です。今日作ってみた文も、1004エラーで頓挫しました。 多分変なこと書いてるとおもいます。 Sub 調定表示_() ' ' Macro5 Macro ' マクロ記録日 : 2010/1/7 ユーザー名 : MINAKO IWAYA ' Sheets("回分表").Select Dim 行番号回分 As Integer Dim 列番号翌再 As Integer 行番号回分 = A3 列番号翌再 = A5 Cells(行番号回分, 列番号翌再).Value = "翌" ' End Sub なにせ、これが気になって他の仕事が手につきません。うまくいきますように。経過報告します。

関連するQ&A

  • マクロのCells.Findについて

    エクセルマクロのCells.Findについて教えてください。 特定の文字列を含むセルを検索するときにCells.Findを使うと思うのですが、例えば、「スペル」という文字列を検索したいけれども、「ゴスペル」というような文字列は排除しながら検索できますか?「スペル」と入力されているセルと、「ゴスペル」と入力されているセルと、「スペル、ゴスペル」と入力されているセルがあったときに、「スペル」や「スペル、ゴスペル」と入力されているセルを検索したいです。 Cells.FindのWhat:=の記入中身を工夫すればできないかなと頭を悩ませていますが、Cells.Find以外の方法でも結構です。どうか宜しくお願いします。

  • マクロについて

    マクロ初心者です。 下記の操作をマクロで行いたいのですがうまくいかないのでどうすればうまくマクロが作動するのか教えて頂ければと思います。4の操作までは正しく作動しましたが5以降に困っています。。。 どなたかお願いしますmm (1) A列にフィルターをかけて[??????}を含むものを選択 (2). 1に.該当するもB列のDataを値のみ数値と値のClear (3) 2の後に再びA列で[??????]を含まないものを選択 (4)  3に該当するA列のDataを数値と値のClear (5)  4の操作で空白となったセルに=上のセルという計算式の指示を出す (6) すべて値貼り付けをし、空白のセルを削除する ※Dataの行数は毎回作業時に変更があります。 ※Dataは数値だけではなく文字列も含んでいます 失敗したマクロ--------------------------------------------- Range("A2").Select Selection.AutoFilter Field:=1, Criteria1:="=*[??????]*", Operator:=xlAnd Columns("B:B").Select Selection.ClearContents Selection.AutoFilter Field:=1, Criteria1:="<>*[??????]*", Operator:=xlAnd Columns("A:A").Select Selection.ClearContents For i = 3 To [A65536].End(xlUp).Row If Cells(i, "A") = "" Then Cells(i - 1, "A").Copy Cells(i, "A") Next i End Sub -----------------------------------------------------------

  • マクロについて

    マクロ初心者です。 下記の操作をマクロで行いたいのですがうまくいかないのでどうすればうまくマクロが作動するのか教えて頂ければと思います。4の操作までは正しく作動しましたが5以降に困っています。。。 どなたかお願いしますmm (1) A列にフィルターをかけて[??????}を含むものを選択 (2). 1に.該当するもB列のDataを値のみ数値と値のClear (3) 2の後に再びA列で[??????]を含まないものを選択 (4)  3に該当するA列のDataを数値と値のClear (5)  4の操作で空白となったセルに=上のセルという計算式の指示を出す (6) すべて値貼り付けをし、空白のセルを削除する ※Dataの行数は毎回作業時に変更があります。 ※Dataは数値だけではなく文字列も含んでいます 失敗したマクロ--------------------------------------------- Range("A2").Select Selection.AutoFilter Field:=1, Criteria1:="=*[??????]*", Operator:=xlAnd Columns("B:B").Select Selection.ClearContents Selection.AutoFilter Field:=1, Criteria1:="<>*[??????]*", Operator:=xlAnd Columns("A:A").Select Selection.ClearContents For i = 3 To [A65536].End(xlUp).Row If Cells(i, "A") = "" Then Cells(i - 1, "A").Copy Cells(i, "A") Next i End Sub -----------------------------------------------------------

  • エクセルのマクロ コマンドのCells

    マクロ初心者です Cells(4,5)=5 とかで目的のセルに数字を代入したいのですが全然違うところに代入されてしまいます。 (一行目ばっかりにはいる、しかも列もずれている) なぜでしょうか? ご存知の方お願いします。

  • Excellマクロ Cellsの範囲選択について

    エクセル2003についてお尋ねします。 A1には行番号にあたる変数が表示されるようになっています。 その変数によって選択するセルの範囲が変わるようにすることが目的でした。 「A1の行番号の5~10列目を選択する」というマクロを 下記のような記述を行いましたが、※のところでエラーが出てしまい、問題がわからずにおります。 お手数ですが解決策をご教授ください。 Sub マクロ1() Dim j As Integer j = Range("A1") Worksheets("Sheet1").Activate Range(Cells(j, 5), Cells(j, 10)).Select ←※ End Sub よろしくお願いいたします。

  • RSSマクロ

    winxp he sp3, excel2003 1. 問合せ 参考a.マクロでは、iNumber = 6501 1個となっています。 これを、銘柄txtから読み込んで、下記のような結果を表示したいのです。 2. 銘柄.txt 約100個: 6501,日立 6502,東芝 6503,三菱電機 3. マクロ結果: コード,銘柄,現在値,高値,安値 6501,日立,770,785,765 6502,東芝,765,779,758 6503,三菱電機,780,985,970 参考: a. Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2008/9/3 ユーザー名 : Cells(1, 1) = "コード": Cells(1, 2) = "銘柄": Cells(1, 3) = "現在値" Cells(1, 4) = "高値": Cells(1, 5) = "安値" Dim iRow As Integer '行指定 Dim iNumber As Integer 'A列4桁数字 iNumber = 6501 'A列の4桁数字初期指定 iRow = 2 '2行目 Cells(iRow, 1).Select 'A列をセレクト(アクティブ化) Cells(iRow, 1) = iNumber 'A列に数字を入力 Cells(iRow, 2) = "=RSS|'" & iNumber & ".T'!銘柄名称" 'B列に式を入力 Cells(iRow, 3) = "=RSS|'" & iNumber & ".T'!現在値" 'C列に式を入力 Cells(iRow, 4) = "=RSS|'" & iNumber & ".T'!高値" 'D列に式を入力 Cells(iRow, 5) = "=RSS|'" & iNumber & ".T'!安値" 'E列に式を入力 End Sub b. マクロ結果: コード,銘柄,現在値,高値,安値 6501,日立,809,815,805 よろしくお願いします。

  • 【Excelマクロ】 行全体を選択したい

    下記マクロはデータが入っている最終行の次のセル(A列)を選択するマクロです。 但し、A列はデータが入っていないこともあるため、必ずデータが入っているB列をキーにしています。 NT = Cells(Rows.Count, "B").End(xlUp).Row + 1 Range("A" & NT).Select B125までデータが入っていた場合A126にカーソルが置かれますが、本当は126行全体を選択したいのです。 「Range("A" & NT).Select」部分をどのようなマクロに変更したらよろしいでしょうか?

  • エクセルのマクロ記述について

    下記の処理をエクセルのマクロで行いたいのですが、どのように記述したよいか教えてください。 4行目から入力されている行まで下記の処理をマクロで行う。 1.J列のセル入力がCIRCLEの行で、B~E列の数値が同じセル間を結合する。 2.K列のセル入力がCIRCLEの行で、F~I列の数値が同じセル間を結合する。 3.J列のセル入力がOBLONG_XまたはOBLONG_Yの行で、B,D列及びC,E列の数値が同じ場合、B列をB列の数値XC列の数値とし、B~E列のセルを結合する。 4.K列のセル入力がOBLONG_XまたはOBLONG_Yの行で、F,G列及びH,I列の数値が同じ場合、F列をF列の数値XG列の数値とし、F~I列のセルを結合する。 5.J列のセル入力がOBLONG_XまたはOBLONG_Yの行で、B,D列及びC,E列の数値が同じでない場合、B列をB列の数値XC列の数値とし、B,C列のセルを結合する。又、D列をD列の数値XE列の数値とし、D,E列のセルを結合する。 6.K列のセル入力がOBLONG_XまたはOBLONG_Yの行で、F,G列及びH,I列の数値が同じでない場合、F列をF列の数値XG列の数値とし、F,G列のセルを結合する。又、H列をH列の数値XI列の数値とし、H,I列のセルを結合する。 7.J列のセル入力がSHAPEの行で、B~E列は何もしない 8.K列のセル入力がSHAPEの行で、F~I列は何もしない

  • 行ごとに判定するマクロについて教えて下さい

    行ごとに判定するマクロについて教えて下さい。 下記のようなマクロで、添付ファイルのように、行ごとで E列からN列で違った数値がないか、入力されていないセルがないかを調べ 4つすべてのセルが同じ数値でない場合は塗りつぶしはされず O列にOKを表示しないようなマクロを組みたいのですが 現在のマクロだと、行ごとではなく、E3~N102セルまでの中で 同じ数値がないかを判断してしまっているため K11セルやK15セルのように数値が入力されていないにも関わらずO列の部分にOKが出てしまいます。 他の行に同じ数値が入っているのは関係なしにして 11行目なら11行目だけで 15行目なら15行目だけで、というように行ごに判定していくには どのようにすればいいでしょうか? Sub 判定マクロ回転() Dim i As Integer, j As Integer Range(Cells(3, 15), Cells(102, 15)).ClearContents For i = 3 To 102 For j = 5 To 14 Cells(i, j).Interior.ColorIndex = 0 If WorksheetFunction.CountIf(Range("E3:N102"), Cells(i, j)) > 3 Then If Cells(i, j).Row Mod 2 = 1 Then Cells(i, j).Interior.ColorIndex = 6 Cells(i, 15) = "OK" Else If Cells(i, j).Row Mod 2 = 0 Then Cells(i, j).Interior.ColorIndex = 40 Cells(i, 15) = "OK" End If End If End If Next j Next i If WorksheetFunction.CountIf(Range("O3:O102"), "OK") > 99 Then MsgBox "データチェックOK(^O^)b" End If End Sub

  • エクセルのマクロの質問です。

    エクセルのマクロの質問です。 こんにちわ。エクセルのマクロを始めて間もないものです。 下記ようなマクロを組みましたが「Windows("B.xls").Activate」(※の部分)でとまってしまいます。 なぜかもわからず困っています。 Workbooks.Open Filename:="B.xls" For i = 1 To 1000 Step 1 Range(Cells(i, 1), Cells(i, 5)).Select Selection.Copy Windows("A.xls").Activate Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Select ActiveSheet.Paste ※ Windows("B.xls").Activate Next i 一応、動作としては Bのマクロを開く→ループ始点(1000回繰り返す) 一回目⇒A1~B5をコピー→Aのエクセルを開く→A列のセル1行目に貼り付ける→Bのエクセルを開く 二回目⇒A2~B5をコピー→Aのエクセルを開く→A列のセル2行目に貼り付ける→Bのエクセルを開く . . . ループ終点 こんな感じで作成しましたが、どうしても上手く動かないで困っています。 無駄な動作が多いかもしれませんが、ぜひアドバイスをお願いします。 また、もっと簡単な動作ができるのであればそちらもお願いします。