- ベストアンサー
エクセル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
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
winarrow07です。 myRangeさんのおっしゃるとおりたしかに計算式を入れるというのは あまりやりません。絶対やらないというわけじゃなく意図的に式と して入れておきたい場合以外はマクロ内での計算結果をセルに入れます。 myRangeさんもスリム化したコードを書いておられますが、私も1案書いておきます。 エクセルの実態がもっと分かればもっと省コードできるかと。 Sub Test() Dim i As Integer For i = 0 To Cells(Rows.Count, 5).End(xlUp).Row - 1 Cells(1 + i, 6).Value = Mid(Cells(1 + i, 5).Value, 2, 3) Next i For i = 0 To Cells(Rows.Count, 3).End(xlUp).Row Cells(1 + i, 1).Value = Cells(1 + i, 12).Value & Cells(1 + i, 6).Value & _ Cells(1 + i, 9).Value & Cells(1 + i, 10).Value & Cells(1 + i, 4).Value Next i End Sub
その他の回答 (7)
- rivoisu
- ベストアンサー率36% (97/264)
反応がないのでいろいろ推測でいろんなコードが書かれています。 推測ついでに 式をセットしたい Sub formulaxx() Range(Cells(1, 6), Cells(Cells(1, 5).End(xlDown).Row, 6)).Formula = "=MID(RC[-1],2,3)" Range(Cells(1, 1), Cells(Cells(1, 3).End(xlDown).Row, 1)).Formula = "=RC[11]&RC[5]&Rc[8]&rc[9]&rc[3]" End Sub 値を入れたい Sub valuiexx() Range(Cells(1, 6), Cells(Cells(1, 5).End(xlDown).Row, 6)).Formula = "=MID(RC[-1],2,3)" Range(Cells(1, 1), Cells(Cells(1, 3).End(xlDown).Row, 1)).Formula = "=RC[11]&RC[5]&Rc[8]&rc[9]&rc[3]" Range(Cells(1, 6), Cells(Cells(1, 6).End(xlDown).Row, 6)) = Range(Cells(1, 6), Cells(Cells(1, 6).End(xlDown).Row, 6)) Range(Cells(1, 1), Cells(Cells(1, 1).End(xlDown).Row, 1)) = Range(Cells(1, 1), Cells(Cells(1, 1).End(xlDown).Row, 1)) End Sub loopしなくても範囲指定してあげれば一括で転記できます。
- myRange
- ベストアンサー率71% (339/472)
式ではなく結果を表示したい、ということですね。 要ですから最初で書くべきことです。 質問者のコードをそのままでやるとしたら、 式を値に変換するためのコードを下記●●のように入れるだけです。 '--------------------------------------------------- Range("F1").Select Do Until ActiveCell.Offset(0, -1).Value = "" With ActiveCell .FormulaR1C1 = "=MID(RC[-1],2,3)" .Value = .Value '●●式を値に変換 .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]" .Value = .Value '●●式を値に変換 .Offset(1, 0).Select End With Loop '----------------------------------------------- ふつうは、式を入れて、というようなことはせずに また、セルをいちいちSelectしないようにします。 例えば、 '------------------------------------------------- Dim R As Long R = 1 Do Until Cells(R, "E").Value = "" Cells(R, "F").Value = Mid(Cells(R, "E"), 2, 3) R = R + 1 Loop R = 1 Do Until Cells(R, "C").Value = "" Cells(R, "A").Value = Cells(R, "L").Value & Cells(R, "F").Value & _ Cells(R, "I").Value & Cells(R, "J").Value & Cells(R, "D").Value R = R + 1 Loop '--------------------------------------------- 以上です。
- winarrow07
- ベストアンサー率41% (143/346)
.FormulaR1C1 = "=MID(RC[-1],2,3)" の部分を .Value = Mid(ActiveCell.Offset(0, -1).Value, 2, 3) に変えます。 .FormulaR1C1 = "=RC[11]&RC[5]&Rc[8]&rc[9]&rc[3]" の部分を .Value = ActiveCell.Offset(0, 11).Value & ActiveCell.Offset(0, 5).Value & ActiveCell.Offset(0, 8).Value & ActiveCell.Offset(0, 9).Value & ActiveCell.Offset(0, 3).Value に変えるとどうでしょうか。
- j97e010w
- ベストアンサー率0% (0/1)
マクロ内の情報をエクセルのセルへ入力させるには Cellsを使用するとできたはずです。 Cells(1, 1) = 出力する内容 Cellsの中の指定は(上から数えた位置、左から数えた位置) のそれぞれが対応します。
- imogasi
- ベストアンサー率27% (4737/17070)
(1)>セルに関数を入れるようにしてるのですが (2)>関数で得られた値をセルに反映されるようにしたいのですが (3)コードの始めと終わりににFunction End Functionガ無い (4)処理中身では。関数式!をセットしている(関数式をわざわざセットしなくても、その都度なら、VBAを実行して結果(セルの値)をセルにセットしては。 この4点がむじゅう矛盾をはらんでいて、 それで何を質問しているのかわからない。 現在は上記コードはSub End Subの間にあって、実行していて, この際、関数化するなら、 Function 名前(引数) (処理) 名前=値 End Function の型にするのだが、処理の内容によっては出来ないことも在る。 そしてセルには =名前(引数)と入れる。 #1の >セルには計算式を入れるのでいいのだが計算が(自動で) されていない、ということでしょうか? ーー コードなど書く前に、何がしたいか、何で困っているか、をはっきり書ける、表現力を養うこと。 それにR1C1形式は願い下げにしたい。読み解きにくい。 エクセルVBAなどの解説書には使われてない。
- winarrow07
- ベストアンサー率41% (143/346)
質問分とNo.1さんの回答を見てちょっと混乱。 >関数で得られた値をセルに反映されるようにしたい とは、今は計算式をセルに入れているが、それをマクロ内で 計算した結果(数値なり文字)をセルに入れるようにしたいと いうことでしょうか? それともセルには計算式を入れるのでいいのだが計算が(自動で) されていない、ということでしょうか?
- rivoisu
- ベストアンサー率36% (97/264)
このコードで動くと思います。 6列目には=MID(RC[-1],2,3) 1列目には=RC[11]&RC[5]&Rc[8]&rc[9]&rc[3] という式が入ります。 >関数で得られた値をセルに反映されるようにしたいのですが 計算方法が手動になっていませんか?
補足
言葉足らずでした。 上記数式をマクロ内で計算して得た結果を セルに反映させたいのですが どうすればよいでしょうか。 ということでした。 宜しくお願い致します。
補足
失礼を致しました。 計算式を貼り付けるマクロなのですが マクロ内で計算した結果をセルに入れたいので 「今は計算式をセルに入れているが、それをマクロ内で 計算した結果(数値なり文字)をセルに入れるようにしたいと いうことです。」