• ベストアンサー

エクセルVBA 「このセルを選択する」方法は? (超初心者です)

ExcelのVBA初心者です。どなたか教えてください。 自作の関数を作りたいのですが、excelで、「この場所のセルのひとつ左のセルを選択」して、ある処理をするにはどのようにしたらいいのでしょうか? たとえば、A1に何かデータがあるとき、B1に自作関数を打ち込むとA1の値を使って何らかの処理をして、その値をB1に返す、ということがしたいのです。また、例えばデータがB8にあるときは、C8に関数を入れるとB8のデータが処理されてC8に返ってくるようにしたいです。 最初、ActiveCell.Offset(0,-1) でうまくいくと思っていましたが、実際やってみるとどうもうまくいきませんでした。 どなたかわかる方、よろしくお願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。#2 のWendy02です。 「スピアマンの順位相関係数」 の、VBAのユーザー定義関数は、以下のWebサイトの一番下にあります。 http://aoki2.si.gunma-u.ac.jp/lecture/Soukan/spearman.html

参考URL:
http://aoki2.si.gunma-u.ac.jp/lecture/stats-by-excel/vba/html/spearman.html
yonchi
質問者

お礼

この関数を使って、FX(為替証拠金取引)のシミュレーションソフトを作成しました。無事完成し、問題なく動くものができあがりました。 (^^) ありがとうございました。

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

その他の回答 (4)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

B1 =myFunc(A1) というように、必要な値や範囲を引数にしてやればいいだけのように思いますが・・

全文を見る
すると、全ての回答が全文表示されます。
  • terakura
  • ベストアンサー率20% (4/20)
回答No.4

質問の内容が理解できていないかもしれません。 もしそうだったらごめんなさい。 B1には関数式を入力するのか、VBAで計算させた 結果を表示させるのかが分かりませんでした。 もしB1セルに関数式を入れるのであれば OFFSET(B1,0,-1)を式の中に入れたらA1の値を 使って計算してくれると思います。 この場合、VBAを使う必要はありませんし 相対参照の式ですので、どこに数式をコピー しても左隣りのセルを参照してくれます。 どうしてもVBAでしたいのであれば 変数を使ったらどうですか? atai = ActiveCell.Offset(0, -1).Value というように左隣りの値をataiに代入しておいて それを計算式で使うのです。 簡単すぎる式ですが(恥ずかしい・・・) ActiveCell.Value = atai * 2 / 3 頑張ってくださいね。

yonchi
質問者

お礼

親切に教えていただきありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 できたら、もう少し具体的に説明してください。 >B1に自作関数を打ち込むとA1の値を使って何らかの処理をして、 どうしたら良いのでしょうか? 例えば、ワークシートのセルに、 = MyFunction() と入れて、左隣のセルの値を処理して結果を出そうとしているのですか? もし、そうだとしたら、初心者の方が、お使いになるテクニックではないのですが。

yonchi
質問者

補足

実は、統計で使う「スピアマンの順位相関係数」というものを求めたいのです。。。以下、具体的に説明します。 いま、A列には日付が昇順に入っています。 A1: 1 A2: 2 A3: 3 A4: 4 A5: 5 以下同様 B列には、価格が入っています。 B1: 14 B2: 18 B3: 17 B4: 13 B5: 15 以下続く このとき、計算期間をn(整数)として、それぞれの時間における価格と日付の順位を求めます。 計算を単純化するために、ここではn=3とします。 まず、1日における価格B1の順位(B1~B3の中での順位)は、もっとも低いので3です。 日付は直近の日付から順位をつけるので、A1~A3の中で比較すると、3となります。 次に、価格B2の順位はB1~B3の中でもっとも高く、1です。日付A2の順位は2です。 同様に価格B3の順位は2、日付A3の順位は1です。 ここで、C1セルに先ほどの数値を用いて C1 = (1日の日付順位-価格順位)^2 + (2日の日付順位-価格順位)^2 + (3日の日付順位-価格順位)^2 = (3-3)^2 + (2-1)^2 + (1-2)^2 = 2 が入るようにしたいです。(順位相関係数は、求まった2をもとにすぐに計算できます) このやり方を知りたいのですが・・・・。 長ったらしくてすみません。。 よろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
  • driverII
  • ベストアンサー率27% (248/913)
回答No.1

ActiveCell.Offset(0,-1).select じゃないの?

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

関連するQ&A

  • エクセルVBAでセル選択

    エクセル2000でリストを作成し、VBAで編集しようとしています。 A列に入力されているコードの先頭に「’」をつけて文字列とするための関数をB2のセルからA列のデータが入力されている最後のセルの隣までコピーしたいと思っています。 A列の最終セルを取得するVBAは分かったのですが、その値をB列の選択範囲として使用する方法がわかりません。 エクセルVBAは全くの初心者です。 どなたか教えてください!

  • EXCEL(VBA)で条件に合うセルを選択する方法

    offset(1,1)などと記述しますが、この(1,1)の部分に あるセルに入っている値を引用することはできないでしょうか。 例えば、セルA1に"10"という値が入っているとします。 これをoffset(△,1)の△の部分の値として使いたいのです。 offsetプロパティでできなければ、他の方法でも構いません。 A1の値を元にセルを選択できれば。。。 説明があまり上手くできないのですが、お分かりになる方は 是非教えてください。 よろしくお願いします。

  • エクセルVBAで関数が入った空白セルの取得

    エクセルVBAで下記のようなセルの参照をしたいのですが、よろしくお願いします。(エクセル2002です)   A  B  C  D  E  F 1 78 80 セル(A1)(B1)には値も関数も入れられています。 セル(C1)(D1)(E1)には値は入っていませんが、ワークシート関数が組み込まれており空白となっています。(関数の""にて空白) セル(F1)には何も入力されていません。 今回はセル(B1)の80の値を取得できるようにVBAで下記のようにコードを組みました。 Range("F1").End(elToLeft).Activate そうすると、セル(E1)に関数があるために(?)(E1)がアクティブな状態となります。 関数が入力されていても空白として(B1)をアクティブな状態にするために良い方法はありますでしょうか? 誠に申し訳ございませんが、よろしくお願いします。

  • Excel VBA セルの選択方法

    こんばんは。 セルの選択方法をお聞きしたいのですが、 SheetAのB2のセルの値を SheetBのリストの最下行(例えば12)からn行目(例えばn=3だったら12行目から15行目)を選択し、SheetAのB2のセルの値を貼り付ける方法を教えてください。 方法は複数あると思うのですが、考えにいきずまってしまいました。 Range("B2").Copy For i = 1 To n Worksheets("Sheet2").Range("b65536").End(xlUp).Offset(1).Select ActiveCell.Parse Selection..Resize(.Rows.Count + [n]).Select それと   Dim cntRow As Integer Dim cntCol As Integer cntRow = Selection.Rows.Count + 1 cntCol = Selection.Columns.Count + 1 Selection.Resize(cntRow, cntCol).Select 上のようなResizeを使って、表(例えばC3~E10)を貼り付けた隣のセル、(例えばB3~B10)のセル番地を取得して、 SheetAのB2のセルの値を貼り付ける方法も教えていただけないでしょうか。 基本的なことをお聞きするようですが、宜しくお願い致します。

  • VBAを使ってエクセル上の表の集計を出したいのですが。

    初心者ゆえ稚拙な質問をお許しください。 A B C D E    C=引出額 1 * * * * 5    D=預入額 2 * * 1 * 4    E=合計額 3 * * * 1 5 エクセルでデーターを随時入力していくための上記のような表を多数のシートに作成したのですが、各シートに関数を入れていると容量的に重たくなってしまうので、VBAを使って下記のようにマクロを組んでみたのですが、引出額もしくは預入額に間違った値を入力した際削除すると、ひとつ上のレコードの値になってしまいます。 要望を言えば、引出額、預入額のセルに間違った値を入力した際削除しても余計な値が入らなく、該当のセルが空白の時は、その合計額のセルも空白にさせたいのですが、何かいい方法はないでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 6 Then ActiveCell.Offset(columnoffset:=1).Value = ActiveCell.Offset(rowoffset:=-1, columnoffset:=1).Value - ActiveCell.Offset(columnoffset:=-1).Value End If If Target.Column = 7 Then ActiveCell.Value = ActiveCell.Offset(rowoffset:=-1).Value + ActiveCell.Offset(columnoffset:=-1).Value End If End Sub Worksheet_Changeにこだわっているわけではありません。 よろしくお願いします。

  • エクセルVBAでの関数

    下記、コードでセルに関数を入れるようにしてるのですが 関数で得られた値をセルに反映されるようにしたいのですが Dimを使用してもどう指定してよいのかわからず苦戦しております。 宜しくお願い致します。 Range("F1").Select Do Until ActiveCell.Offset(0, -1).Value = ""       With ActiveCell .FormulaR1C1 = "=MID(RC[-1],2,3)" .Offset(1, 0).Select End With Loop Range("A1").Select Do Until ActiveCell.Offset(0, 2).Value = "" With ActiveCell .FormulaR1C1 = "=RC[11]&RC[5]&Rc[8]&rc[9]&rc[3]" .Offset(1, 0).Select End With Loop

  • エクセルVBAで設定したセルの値

    エクセルVBAについての質問です。 例えば、A1とB1のセルの値を参照している数式がC1セルに設定してあるとします。 さらに、D1のセルにはC1の値を参照している数式が設定してあるとします。 VBAでA1、B1のセルの値を変更したとします。 次のステップのVBAでC1、D1のセルを参照すれば、A1、B1の変更が反映された後の正しい値である C1、D1の値が取得できるのでしょうか? できて当たり前だと思うのですが、セルに設定してある数式が大変複雑であったりすると、ちゃんとA1、B1の変更が反映された正しいC1、D1セルの値がVBAで取得できるのかちょっと不安です。 ばかな質問かもしれませんが、回答をよろしくお願い致します。

  • セル範囲の左上のセルの取得方法

    エクセル2010のVBAで関数を自作しているのですが Test(A as range, B as range)という関数で Aはセル1個、Bはセル範囲を選択して、Aは必ずBの左上のセルになるので、 Test(B as range)の様に変数を減らしたいです。 ただ、関数内でAを使用するので、Bのセル範囲の左上の値を取得する必要があります。 Bのセル範囲の左上の取得方法が分かりません。

  • セルの選択、貼り付け

    よろしくお願いします。 下記のような処理を大量データに対して行うVBAを書きたいのですが、なかなか上手くできません。 〈処理〉 A列の空白セルに対して、空白セル(例えばA2)の上のセル(A1)の値(2003)をコピーし、空白セル(A2)に貼り付ける。 次に、ひとつ下空白セル(A3)も同様に1つ上のセル(A2)の値(2003)をコピーし、空白セル(A3)に貼り付ける。 を繰り返す。 このようなプログラムを書きたいのですが。    A     B C …       A  B C… 1 2003         1 2003 2              2 2003 3              3 2003 4 2005       ⇒ 4 2005 5              5 2005 6              6 2005 7              7 2005 8 1999         8 1999 :              : :              :        よろしくお願いします。

  • エクセル2013のVBAで結合セル基準Offset

    エクセル2013のVBAで、ActiveWorkbook.ActiveSheetの、例えばC3からI3まで結合されているセルを基準ActiveCellにして、行方向は4から17セルまで列方向はC列からI列までをコピーしたいのですが、思ったようにOffsetで位置がとれず列がどうしてもずれてしまいます。 どのような指定をすればできるでしょうか? すいませんが、よろしくお願いいたします。

コピー機からPCの印刷機に変える
このQ&Aのポイント
  • PX-501Aを使っていますが、コピー機として使用後、PCの印刷機に切り替える方法が分かりません。
  • コピー機からPCの印刷機に変える方法が知りたいです。
  • EPSON社製品のPX-501Aを使用していますが、コピー機からPCの印刷機に切り替える方法を教えてください。
回答を見る

専門家に質問してみよう