Excel上で、セルB1に「経度」、B2に「144-50498」、B3に「143-02524」、B4に「144-21300」という文字列が入っています。
B2からB4の文字列を変数を用いて順にSplit関数で分割し、最終的には、B2の数値でいうと「144+(50498/60000)」という値で返せる式をVBA上で組みたいのですが、一昼夜悩みながら混乱してしまって厳しい状況です。どなたか御助言頂ければと思います。
Splitの使い方です。
セル = ActiveCell
分割セル = Split(セル, "-")
MsgBox 分割セル(0) & "と" & 分割セル(1)
CDbl 関数も調べてみて下さい。
一昼夜どこで引っかかってるのかわかりませんが
悩みをぶちまけてもらわないと回答も難しいです
(↑ここ重要です)
推測される悩み
・式が正しく作成されない
・正しく式は作れるが計算結果がおかしい
・コンパイルエラーが出る
変数は正しく配列で宣言していますか?
例
Dim ArreyVal() As Long
ArreyVal = Split("対象とする値", "分割したい記号")
以後"分割したい記号"という言葉の代わりにセパレータという言葉を使うようにします
今回の場合あんさんも書いてる通り対象とする値は
B2〜B4のセルの値
セパレータは "-" ですね
という感じで・・・
> Dim ArreyVal() As Long
> ArreyVal = Split("対象とする値", "分割したい記号")
型が一致しません。とエラーになりますけど。。。
> 変数は正しく配列で宣言していますか?
ちなみにVBAのバージョンを明記してくれないとSplit関数が使えるかどうか分かりませんので。
(Excel2000から)
>型が一致しません。とエラーになりますけど。。。
申し訳ないっす
>ちなみにVBAのバージョンを明記してくれないとSplit関数が使えるかどうか分かりませんので。
という忠告より使用できるとしたら・・・
Dim ArreyVal() As String
ArreyVal = Split(Cells(1, 2), "-")
文字列で返すのにLong宣言とは・・・間抜けな話だ・・・orz
あとは、しゅうさんからのヒントのCDbl等のキャスト系の関数で文字列を
数値化して計算すれば出来るのではないでしょうか
一応・・・
Worksheets("シート名").Range("B1").Value
Worksheets("シート名").Cells(1, 2).Value
シート名指定しないと変なシート見てるといわれるかもしれないので・・・
ありがとうございます。
Split関数はうまく機能させることができました。
そこで、今度は分割した「144」「50498」という数値を
Excelシートには変更を加えずにVBA上だけで加減乗除したいのですが、
勉強不足から、式を入力してもエラー連発で足踏みしています。
再度御助言をお願い致します。
> 式を入力してもエラー連発で足踏みしています。
どのように 式を入力 したのか分かりませんが…
<セル>.Value="=1+2" などと出来ませんか?
上でも出ていますが、
Splitで分割したものは文字列です。
当然
"1"+"2"
とやって結果が3になるわけではないです。
文字列の"1"を数値の1とするにはどうしたらよいか。。。
簡単な方法としては Val関数を使います。
> >ちなみにVBAのバージョンを明記してくれないとSplit関数が使えるかどうか分かりませんので。
> という忠告より使用できるとしたら・・・
というか、表題にめちゃくちゃSplit関数をつかってとありましたね。
つかえないんだったら、書きませんよね。。。
余計なお世話でした。
でも、質問者の も さん、ちゃんとExcelのバージョンを明記しましょうね。
すいません。まちがえました。
> でも、質問者の も さん、ちゃんとExcelのバージョンを明記しましょうね
でなくて c さんでした。
も さん、大変申し訳ございませんでした。orz
いえいえ、お構いなく。
良い話ではないですが
Valなど使わなくても計算が行われました(Excel2002)
ということはもっと根本的に違う所があるのかな?
最初に述べましたが何で悩んでいるのか書いてください
エラー連発ならエラーくらい書いてもらえませんか?
そのためのエラーメッセージであることを認識してください
見返りをもらう為の情報提供は必須です
説明が足りず、申し訳ございませんでした。
Excel2000のVBEを使用しています。
先程は算式で無理矢理
tmp(0) + tmp(1) / 60000
という式を組もうとして「型が合いません」というエラーが出ていましたが、
Val関数を使ってtmpを別の変数に格納したところ、無事に計算できました。
ありがとうございました。
質問をする際はより細かな状況を説明するように致します。(正直「何がわからないのか」が自分でもわかっていませんでした。)すみませんでした。
ツイート | ![]() |