A 回答 (7件)
- 最新から表示
- 回答順に表示
No.7
- 回答日時:
No.6です!
たびたびごめんなさい。
前回のコードは一文字ずつ舐めるように検索しています。
小数点以下の数値がある場合対応できません。
もう一度コードを載せておきます。
Sub test() 'この行から
Dim i, j As Long
Dim str, buf As String
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
'↑データが1行目からあれば「2」を「1」に変更
For j = 1 To Len(Cells(i, 1))
str = StrConv(Mid(Cells(i, 1), j, 1), vbNarrow)
If str Like "[0-9]" Or str = "+" Or str = "-" Or str = "×" _
Or str = "÷" Or str = "." Then
buf = buf & str
End If
Next j
buf = WorksheetFunction.Substitute(WorksheetFunction.Substitute(buf, "×", "*"), "÷", "/")
Cells(i, 2) = "=" & buf
buf = ""
Next i
End Sub 'この行まで
何度も失礼しました。m(__)m
No.6
- 回答日時:
こんばんは!
VBAでの一例です。
余計なお世話かも知れませんが、加減乗除に対応できるようにしてみました。
尚、掛け算に「×」を使っているということは割り算には「÷」が使ってあるという前提です。
(データ内には「*」や「/」がない)
データはA列の2行目からあるとし、B列に計算結果を表示するようにしています。
画面左下にある操作したいSheet見出し上で右クリック → コードの表示 → VBE画面が出ますので
↓のコードをコピー&ペーストしてマクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)
Sub test() 'この行から
Dim i, j As Long
Dim str, buf As String
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
'↑データが1行目からあれば「2」を「1」に変更
For j = 1 To Len(Cells(i, 1))
str = StrConv(Mid(Cells(i, 1), j, 1), vbNarrow)
If str Like "[0-9]" Or str = "+" Or str = "-" Or str = "×" Or str = "÷" Then
buf = buf & str
End If
Next j
buf = WorksheetFunction.Substitute(WorksheetFunction.Substitute(buf, "×", "*"), "÷", "/")
Cells(i, 2) = "=" & buf
buf = ""
Next i
End Sub 'この行まで
こんな感じではどうでしょうか?m(__)m
No.5
- 回答日時:
A1セルから下方にお示しのような数値があるとしてB1セルには次の式を入力して下方にオートフィルドラッグします。
=IF(A1="","",IF(ISNUMBER(FIND(" ",ASC(A1))),MID(A1,FIND(" ",ASC(A1))+1,FIND("t×",A1)-FIND(" ",ASC(A1))-1)*MID(A1,FIND("t×",A1)+2,FIND("h×",A1)-FIND("t×",A1)-2)*MID(A1,FIND("h×",A1)+2,FIND("L",A1)-FIND("h×",A1)-2),LEFT(A1,FIND("t×",A1)-1)*MID(A1,FIND("t×",A1)+2,FIND("h×",A1)-FIND("t×",A1)-2)*MID(A1,FIND("h×",A1)+2,FIND("L",A1)-FIND("h×",A1)-2)))
なお、式の中の" "の間隔は半角のスペースにします。実際のデータで半角のスペースになっているか、全角のスペースになっているかは問いません。
No.4
- 回答日時:
使用ソフトが書いてない。
エクセルにしても質問には明記するもんだ。1200tなどはセルに入っている(エクセルの場合は文字をくっつけると文字列データとなる)のか。
398hも別セルだよね。
だからエクセルで言えば=A1*B1*C1 的な計算をしたいのか。
thlはエクセルの表示形式でそのように、見えているのではないよね。この辺の意識がない初心者の質問者が多いので聞く。表示形式適用の場合は簡単。=A1*B1*C1 。エクセルでは本来単位らしい記号は、表示形式の設定で付けるべきなんだ。
ーー
1セルに1200t×398h×1200Lが
入っている場合は下記VBAが一解法例。
ー
単位らしい記号は必ず1文字か。
単位らしい記号は必ず終わりに付いているのか。途中は無いよね。
あるいは1200t×398h×1200Lの文字列の途中にあるのか。Xがセパレータの薬をするのか。
付いてない場合は無いのか。
コンピュターをやる場合は、こういう想像を働かせて、質問・問題文を書くべきなんだ。
それによって、がらりと解法が変わることも多い。
エクセル関数には数字と文字列を分ける便利な単一関数がない。従って複雑な式になる。
VBA向きの問題かな。
ーーー
単位らしき文字の半角全角、大文字小文字に注意。
A1の文字列を計算しB1に
A列全体の各行データなどに対し行う場合は、少々変更が必要。
Sub test01()
x = Cells(1, "A")
m = 1
s = Split(x, "×")
For i = o To UBound(s)
y = s(i)
If Right(y, 1) = "h" Or Right(y, 1) = "L" Or Right(y, 1) = "t" Then
v = Val(Left(y, Len(y) - 1))
MsgBox v
m = m * v
End If
Next i
Cells(1, "B") = m
End Sub
No.3
- 回答日時:
昔々の何かの立体データのようですが、このようなデータをもらうと面倒ですね。
しかしデータ量が多いときはエクセルの作業列を使えば、最初の変換だけちょっと面倒でも
あとは簡単になります。
1、まずデータをコピーしてエクセルにテキスト形式で貼りつけます。並べ替えの都合で番号を付与しておきます。
2、asc関数を使って、可能なものは半角にします。
記号のh,t,lは1か2の段階で、空白と「置換」して消しておきます。
3、データをセルに分割する都合で、並べ替えをして数字からはじまるものを1列右へ移動します。
4、「データ」→「区切り位置」で数値として取り出し、右側に計算式をいれます。
No.2
- 回答日時:
エクセルですよね?
作ってみました。一応動作確認済みです。
標準モジュールを作成し下記をコピーしてください。
Option Explicit
Function KEISAN(strArg As String) As Double
Dim strFormula As String
Dim strChar As String
Dim i As Integer
strFormula = ""
For i = 1 To Len(strArg) '1文字ずつ取り出してループ
strChar = StrConv(Mid(strArg, i, 1), vbNarrow)
If InStr(1, "0123456789×÷/+*()", strChar) <> 0 Then '計算式に使える文字のみ取り出し
Select Case strChar '**** ×と÷は数式に使える記号に変換
Case "×"
strChar = "*"
Case "÷"
strChar = "/"
End Select
strFormula = strFormula & strChar
End If
Next i
KEISAN = Evaluate(strFormula) '数式を計算評価して返す
End Function
使い方は
=KEISAN(セル名)です
あいう 1200t×398h×1200L
の場合
573120000
の結果がでました。
使える記号は掛け算だけでなく *-/+のほか()かっこ、÷×も使えます。
例えば 「あいう (1000t+398h÷4343)/1200L かきくけこ
など自由な式も計算できます。四則演算のみで関数は使えません
No.1
- 回答日時:
>thLの左の数値を抜き出して掛け算する関数はできますでしょうか?
⇒出来ますが、訳が判らない長い数式になりますのでお勧めしません。
それより、データ配列を再構成すれば、数式やデータ編集もシンプルになります、
データ→区切り位置、編集→置換等を活用してTHL毎に列を割当てみては如何でしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- Excel(エクセル) エクセル 関数について質問です。 2 2022/10/03 11:14
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- Excel(エクセル) SUMIF関数について 4 2023/06/14 13:13
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- Java Java 南京錠 2 2023/02/04 11:46
- Excel(エクセル) エクセルで文字列と数字が混在する列に書式設定したい。 3 2022/12/19 09:11
- PostgreSQL 数値が定期的にあらわれる文字列から、いくつめに出現した数値が指定して切り出したい 1 2023/06/08 13:12
- Excel(エクセル) Excelの文字列を数字に変換する方法について 6 2023/07/31 21:18
- PHP カラーミーショップのSmartyでの文字列抜き出し 2 2022/05/06 11:51
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのセル内でタブキーの...
-
エクセルで3Dの円錐形を作成...
-
エクセルのデータを自動的にweb...
-
文字をアルファベット順に3つ...
-
日報のデータを月報にデータを...
-
エクセルで全波整流回路の波形
-
エクセル 文字の先頭4文字だ...
-
エクセルのセルが突然選択でき...
-
エクセルの二重引用符と貼り付け
-
Word 加算数字入力
-
エクセルのグラフでデータテー...
-
グラフの参照範囲を自動的に変...
-
エクセルのテーブルで自動拡張...
-
VBでリアルタイムにグラフを...
-
excel03 上書きで消してしまっ...
-
一般家庭でのエクセル利用法
-
文字列から数値を抜き出して計算
-
エクセル 三桁の数字をリンク...
-
リンクデータが更新できない ...
-
エクセルで関数グラフを描きた...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルのセル内でタブキーの...
-
エクセルで全波整流回路の波形
-
エクセル 文字の先頭4文字だ...
-
エクセルVBA 長さ0の文字列をNu...
-
エクセルのグラフでデータテー...
-
エクセルで3Dの円錐形を作成...
-
エクセル データ追加するもグ...
-
VBA初心者です。電話番号の数字...
-
日報のデータを月報にデータを...
-
エクセルで関数グラフを描きた...
-
文字をアルファベット順に3つ...
-
エクセルの神よ、ご回答を! エ...
-
差し込み印刷で文字化け!
-
エクセル マクロ テキストファ...
-
ウェブから貼ったドロップダウ...
-
エクセルマクロでセルの文字サ...
-
エクセルの変換
-
エクセルのデータを自動的にweb...
-
エクセルにて指定文字数以上の...
-
一太郎からエクセルに
おすすめ情報