質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

3回答

455閲覧

【Excel VBA】同じセルにある2つの変動数を個々に取得したい

FoxSonne

総合スコア5

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2020/03/11 14:03

前提・実現したいこと

セキュリティソフトのバージョン管理するためのExcelで使用しているマクロを回収することになり、
今まで1つのソフトバージョン管理だったのが2つ管理に増え、リスト表の配置変更は禁止の状況です。

Aのソフトなら左の値を、Bのソフトなら右の値を と個々に取得したい場合のやり方を質問したいです。
例(左にAソフトのバージョン、右にBソフトのバージョンがありこれは同一セルに入っている)
現行 5000
改修 5000/3000

試したこと

A1にソフト名、B1に問題の値として

VBA

1Dim BV As Integer 'Bソフト(右)を入れる変数 2If Range(A1).Value = "Bソフト" Then 3 BV=InStrRev(Range(B1).Value , "/") '右から/までの文字数取得 4 Range(C1).Value = Mid(Range(B1).Value , BV -1) 'C1へB1右だけの値を出力 5Else 6 'LenでB1の総文字数取得後InStrRevで取得した数字を引く、その数字をC1へ出力予定。 7EndIf

書き方などはあまり気にしないでください。
やってることとしては
・If文でBソフトなら右側の取得、Aソフトなら右側文字数を用いて左側を取得する 流れです。

発生している問題

必ず4桁とわかっていれば楽なのですがバージョンアップして5桁になることを考えて作っているため作り方がわからなくなっています。
特にこの形じゃないといけないわけではないので他に同一セル内の2つの値をここに取得する方法があればご教授いただきたく思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ExcelVBA

1Option Explicit 2 3Sub test() 4 Dim sType As String 5 Dim vVersion As Variant 6 Dim i As Long 7 8 sType = ActiveSheet.Range("A1").Value 9 vVersion = Split(ActiveSheet.Range("B1").Value, "/") 10 11 Select Case sType 12 Case "Aソフト": i = 0 13 Case "Bソフト": i = 1 14 End Select 15 16 MsgBox sType & " : Ver." & vVersion(i) 17End Sub

こんな感じとか。。。。

投稿2020/03/11 22:34

mattuwan

総合スコア2136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FoxSonne

2020/03/12 03:03

回答ありがとうございます。 セレクトケースは初めて見たので調べながら組み込めるか試して見ます!
guest

0

関数にしておくと、いいでしょう。
可読性かあがりますし、仕様が変更になった場合(例えばソフトが3種類にふえたとか)でも関数のみの改修ですみます。

vba

1Public Function GetVersion(Soft As String, Versions As String) As String 2 Dim aVersions As String 3 aVersions = Split(Versions, "/") 4 5 Dim i As Long 6 Select Case Soft 7 Case "Aソフト": i = 0 8 Case "Bソフト": i = 1 9 Case Else: Exit Function 10 End Select 11 12 GetVersion = aVersions(i) 13End Function 14 15Sub test() 16 Range("C1").Value = GetVersion(Range("A1").Value, Range("B1").Value) 17End Sub

 
また、セルに式として設定することも可能です。

=GetVersion(A1,B1)

投稿2020/03/12 00:55

hatena19

総合スコア33782

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FoxSonne

2020/03/12 03:07

回答ありがとうございます。 なるほど、確かに関数化大事ですね、今後の改修のためと説明して組み込めるよう相談して実施してみます!
guest

0

ベストアンサー

Aのソフトなら左の値を、Bのソフトなら右の値を取得できるようにしてみました。

VBA

1Sub hoge() 2 Dim BV As Integer 3 BV = InStrRev(Range("B1").Value, "/") '最も右にある”/"までの左からの文字数取得 4 If Range("A1").Value = "Bソフト" Then 5 Range("C1").Value = Mid(Range("B1").Value, BV + 1) 'C1へB1右だけの値を出力 6 ElseIf Range("A1").Value = "Aソフト" Then 7 Range("C1").Value = Left(Range("B1").Value, BV - 1) 'C1へB1左だけの値を出力 8 End If 9End Sub

投稿2020/03/11 14:40

TanakaHiroaki

総合スコア1063

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FoxSonne

2020/03/12 03:05

回答ありがとうございます。 教えていただいた形だとリストの使用でエラーになってしまったので右の数字はright関数で乗りきりました。
TanakaHiroaki

2020/03/12 11:30

right関数を使ったのですね。お疲れさまでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問