こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセル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

投稿日時 - 2009-12-04 12:15:14

QNo.5497128

困ってます

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

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

投稿日時 - 2009-12-04 14:08:12

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(8)

ANo.8

反応がないのでいろいろ推測でいろんなコードが書かれています。
推測ついでに
式をセットしたい
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しなくても範囲指定してあげれば一括で転記できます。

投稿日時 - 2009-12-04 14:40:11

ANo.6

式ではなく結果を表示したい、ということですね。
要ですから最初で書くべきことです。
質問者のコードをそのままでやるとしたら、
式を値に変換するためのコードを下記●●のように入れるだけです。
'---------------------------------------------------
 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
'---------------------------------------------

以上です。

投稿日時 - 2009-12-04 13:57:42

ANo.5

.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
に変えるとどうでしょうか。

投稿日時 - 2009-12-04 13:46:39

ANo.4

マクロ内の情報をエクセルのセルへ入力させるには
Cellsを使用するとできたはずです。

Cells(1, 1) = 出力する内容

Cellsの中の指定は(上から数えた位置、左から数えた位置)
のそれぞれが対応します。

投稿日時 - 2009-12-04 13:19:13

ANo.3

(1)>セルに関数を入れるようにしてるのですが
(2)>関数で得られた値をセルに反映されるようにしたいのですが
(3)コードの始めと終わりににFunction End Functionガ無い
(4)処理中身では。関数式!をセットしている(関数式をわざわざセットしなくても、その都度なら、VBAを実行して結果(セルの値)をセルにセットしては。
この4点がむじゅう矛盾をはらんでいて、
それで何を質問しているのかわからない。
現在は上記コードはSub End Subの間にあって、実行していて,
この際、関数化するなら、
Function 名前(引数)
(処理)
名前=値
End Function
の型にするのだが、処理の内容によっては出来ないことも在る。
そしてセルには =名前(引数)と入れる。
#1の
>セルには計算式を入れるのでいいのだが計算が(自動で)
されていない、ということでしょうか?
ーー
コードなど書く前に、何がしたいか、何で困っているか、をはっきり書ける、表現力を養うこと。
それにR1C1形式は願い下げにしたい。読み解きにくい。
エクセルVBAなどの解説書には使われてない。

投稿日時 - 2009-12-04 13:16:25

ANo.2

質問分とNo.1さんの回答を見てちょっと混乱。
>関数で得られた値をセルに反映されるようにしたい
とは、今は計算式をセルに入れているが、それをマクロ内で
計算した結果(数値なり文字)をセルに入れるようにしたいと
いうことでしょうか?
それともセルには計算式を入れるのでいいのだが計算が(自動で)
されていない、ということでしょうか?

投稿日時 - 2009-12-04 12:46:26

補足

失礼を致しました。
計算式を貼り付けるマクロなのですが
マクロ内で計算した結果をセルに入れたいので
「今は計算式をセルに入れているが、それをマクロ内で
計算した結果(数値なり文字)をセルに入れるようにしたいと
いうことです。」

投稿日時 - 2009-12-04 13:00:02

ANo.1

このコードで動くと思います。
6列目には=MID(RC[-1],2,3)
1列目には=RC[11]&RC[5]&Rc[8]&rc[9]&rc[3]
という式が入ります。

>関数で得られた値をセルに反映されるようにしたいのですが
計算方法が手動になっていませんか?

投稿日時 - 2009-12-04 12:33:03

補足

言葉足らずでした。
上記数式をマクロ内で計算して得た結果を
セルに反映させたいのですが
どうすればよいでしょうか。
ということでした。
宜しくお願い致します。

投稿日時 - 2009-12-04 13:02:58

あなたにオススメの質問