変数を使ってSplit関数の値を返すには?

解決


  2005-11-29 10:48:04  No: 128367

Excel上で、セルB1に「経度」、B2に「144-50498」、B3に「143-02524」、B4に「144-21300」という文字列が入っています。
B2からB4の文字列を変数を用いて順にSplit関数で分割し、最終的には、B2の数値でいうと「144+(50498/60000)」という値で返せる式をVBA上で組みたいのですが、一昼夜悩みながら混乱してしまって厳しい状況です。どなたか御助言頂ければと思います。


あん  2005-11-29 11:28:54  No: 128368

Splitの使い方です。

セル = ActiveCell
分割セル = Split(セル, "-")
MsgBox 分割セル(0) & "と" & 分割セル(1)


しゅう  2005-11-29 11:45:45  No: 128369

CDbl 関数も調べてみて下さい。


葉月  2005-11-29 18:02:06  No: 128370

一昼夜どこで引っかかってるのかわかりませんが
悩みをぶちまけてもらわないと回答も難しいです
(↑ここ重要です)

推測される悩み
・式が正しく作成されない
・正しく式は作れるが計算結果がおかしい
・コンパイルエラーが出る

変数は正しく配列で宣言していますか?

Dim ArreyVal() As Long

ArreyVal = Split("対象とする値", "分割したい記号")

以後"分割したい記号"という言葉の代わりにセパレータという言葉を使うようにします

今回の場合あんさんも書いてる通り対象とする値は
B2〜B4のセルの値
セパレータは  "-"  ですね

という感じで・・・


Blue  2005-11-29 18:12:48  No: 128371

> Dim ArreyVal() As Long
> ArreyVal = Split("対象とする値", "分割したい記号")
型が一致しません。とエラーになりますけど。。。

> 変数は正しく配列で宣言していますか?

ちなみにVBAのバージョンを明記してくれないとSplit関数が使えるかどうか分かりませんので。
(Excel2000から)


葉月  2005-11-29 19:21:51  No: 128372

>型が一致しません。とエラーになりますけど。。。
申し訳ないっす

>ちなみにVBAのバージョンを明記してくれないとSplit関数が使えるかどうか分かりませんので。
という忠告より使用できるとしたら・・・

Dim ArreyVal() As String

ArreyVal = Split(Cells(1, 2), "-")

文字列で返すのにLong宣言とは・・・間抜けな話だ・・・orz

あとは、しゅうさんからのヒントのCDbl等のキャスト系の関数で文字列を
数値化して計算すれば出来るのではないでしょうか


葉月  2005-11-29 19:28:37  No: 128373

一応・・・
Worksheets("シート名").Range("B1").Value

Worksheets("シート名").Cells(1, 2).Value

シート名指定しないと変なシート見てるといわれるかもしれないので・・・


c  2005-11-29 20:28:21  No: 128374

ありがとうございます。
Split関数はうまく機能させることができました。
そこで、今度は分割した「144」「50498」という数値を
Excelシートには変更を加えずにVBA上だけで加減乗除したいのですが、
勉強不足から、式を入力してもエラー連発で足踏みしています。
再度御助言をお願い致します。


  2005-11-29 20:33:32  No: 128375

> 式を入力してもエラー連発で足踏みしています。
どのように 式を入力 したのか分かりませんが…
<セル>.Value="=1+2" などと出来ませんか?


Blue  2005-11-29 20:41:15  No: 128376

上でも出ていますが、
Splitで分割したものは文字列です。

当然
"1"+"2"
とやって結果が3になるわけではないです。
文字列の"1"を数値の1とするにはどうしたらよいか。。。

簡単な方法としては Val関数を使います。


Blue  2005-11-29 20:47:07  No: 128377

> >ちなみにVBAのバージョンを明記してくれないとSplit関数が使えるかどうか分かりませんので。
> という忠告より使用できるとしたら・・・
というか、表題にめちゃくちゃSplit関数をつかってとありましたね。
つかえないんだったら、書きませんよね。。。

余計なお世話でした。

でも、質問者の も さん、ちゃんとExcelのバージョンを明記しましょうね。


Blue  2005-11-29 20:48:24  No: 128378

すいません。まちがえました。
> でも、質問者の も さん、ちゃんとExcelのバージョンを明記しましょうね
でなくて c さんでした。

も さん、大変申し訳ございませんでした。orz


  2005-11-29 20:53:08  No: 128379

いえいえ、お構いなく。


葉月  2005-11-29 21:07:43  No: 128380

良い話ではないですが
Valなど使わなくても計算が行われました(Excel2002)

ということはもっと根本的に違う所があるのかな?

最初に述べましたが何で悩んでいるのか書いてください
エラー連発ならエラーくらい書いてもらえませんか?
そのためのエラーメッセージであることを認識してください

見返りをもらう為の情報提供は必須です


  2005-11-29 23:01:49  No: 128381

説明が足りず、申し訳ございませんでした。
Excel2000のVBEを使用しています。
先程は算式で無理矢理
tmp(0) + tmp(1) / 60000
という式を組もうとして「型が合いません」というエラーが出ていましたが、
Val関数を使ってtmpを別の変数に格納したところ、無事に計算できました。
ありがとうございました。

質問をする際はより細かな状況を説明するように致します。(正直「何がわからないのか」が自分でもわかっていませんでした。)すみませんでした。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加