Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2619 / 13646 ツリー ←次へ | 前へ→

【66867】大至急 セル内のデータを一部を読み込み数字に対応させたい あき 10/10/13(水) 19:59 質問[未読]
【66868】Re:大至急 セル内のデータを一部を読み込... keisuke 10/10/13(水) 20:55 回答[未読]
【66869】Re:大至急 セル内のデータを一部を読み込... かみちゃん 10/10/13(水) 21:02 発言[未読]
【66870】Re:大至急 セル内のデータを一部を読み込... Hirofumi 10/10/13(水) 21:19 回答[未読]
【66873】Re:大至急 セル内のデータを一部を読み込... あき 10/10/13(水) 22:35 質問[未読]
【66875】Re:大至急 セル内のデータを一部を読み込... Hirofumi 10/10/13(水) 23:17 回答[未読]
【66876】Re:大至急 セル内のデータを一部を読み込... Hirofumi 10/10/13(水) 23:26 回答[未読]
【66877】Re:大至急 セル内のデータを一部を読み込... かみちゃん 10/10/14(木) 5:08 発言[未読]
【66884】Re:大至急 セル内のデータを一部を読み込... あき 10/10/14(木) 19:09 お礼[未読]

【66867】大至急 セル内のデータを一部を読み込み...
質問  あき  - 10/10/13(水) 19:59 -

引用なし
パスワード
   大至急でお願いします!!VBAでセル内のデータを一部読み込み数字に対応させたい
行き詰ってしまったのでお願いします。

G列のセルに4桁、H列のセルに5桁又は6桁入っています(両方アルファベットと数字の混合)
それを1・2・3・4・5という区分に分けたいです。

『1』の場合:G列のセルの末尾が"H"
『2』の場合:にはG列のセルの最後が"Y"もしくは"MMX"
『3』の場合:にはH列のセルに"12345"という数字が(前には4桁あり、後ろには何もないか、1桁あります)
『4』の場合:にはG列のセルの末尾が"Y"で、さらにH列に"12345"という数字がある場合です
(前には4桁あり、後ろには何もないか、1桁あります)
『5』の場合:上記以外のものと、H列の頭にV7、後ろに3桁か4桁あるものです。

"1234"は5桁目の数値を取る形で行いたいです。


現在のマクロでは下記のようにしておりますが、『3』『4』が上手く動きません。

Dim a AS Integer
a=1

Do until cells(a,"H").value=""

If cells(a,7).value Like "*Y" Then
cells(a,15).value="2"
Elseif cells(a,7).value Like "*MMX" Then
cells(a,15).value="2"
Elseif cells(a,7).value Like "*H" Then
cells(a,15).value="1"
------------------------------------

『3』『4』が良く分かりません

------------------------------------
Elseif cells(a,8).value Like "V7*" Then
cells(a,15).value="5"
Else
cells(a,15).value="5"
End If
a=a+1

Loop

どなたか是非教えてください。
A1セルを始めに指定してあります。

上記でおかしい所や、こうした方がいいというものもありましたら
併せて教えてくださいませ。

よろしくお願い致します。

【66868】Re:大至急 セル内のデータを一部を読み...
回答  keisuke  - 10/10/13(水) 20:55 -

引用なし
パスワード
   ▼あき さん:

形としてはこんな感じでしょうか?cllesとかはご自分のに合わせてください。

InStr命令はこの場合”12345”が含まれると文字列の位置が帰ります
ないときは0が、、、、
Rightは右から1バイトの文字列が帰ります。

Dim s1 As Integer
Dim str As String

str = Range("G1")
s1 = InStr(Range("H1"), "12345")
str = Right(str, 1)

If s1 <> 0 And str = "Y" Then
  Cells(1, 15).Value = "4"
 ElseIf s1 <> 0 Then
  Cells(1, 15).Value = "3"
End If

【66869】Re:大至急 セル内のデータを一部を読み...
発言  かみちゃん E-MAIL  - 10/10/13(水) 21:02 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>上記でおかしい所や、こうした方がいいというものもありましたら

ということで、Select Case を使う例です。
ちょっと時間がないので、検証は、していません。

Sub Sample()
 Dim a As Integer
 
 a = 1
 Do Until Cells(a, "H").Value = ""
  Select Case True
   Case Cells(a, 7).Value Like "*H"
    Cells(a, 15).Value = "1"
   Case Cells(a, 7).Value Like "*Y"
    If Cells(a, 8).Value Like "*12345*" Then
     Cells(a, 15).Value = "4"
    Else
     Cells(a, 15).Value = "2"
    End If
   Case Cells(a, 7).Value Like "*MMX"
    Cells(a, 15).Value = "2"
   Case Cells(a, 8).Value Like "*12345*"
    Cells(a, 15).Value = "3"
   Case Cells(a, 8).Value Like "V7???"
    Cells(a, 15).Value = "5"
   Case Cells(a, 8).Value Like "V7????"
    Cells(a, 15).Value = "5"
   Case Else
    Cells(a, 15).Value = "5"
  End Select
  a = a + 1
 Loop
End Sub

なお、変数a は、行数を示すならば、Integer型ですと、32767を超えると、
オーバーフローというエラーになるので、Long型のほうがいいと思います。

【66870】Re:大至急 セル内のデータを一部を読み...
回答  Hirofumi  - 10/10/13(水) 21:19 -

引用なし
パスワード
   こんなのでは

Public Sub Test()

  Dim a As Long
  
  a = 1
  
  Do Until Cells(a, "H").Value = ""
    '『1』の場合:G列のセルの末尾が"H"
'    If Cells(a, "G").Value Like "*Y" Then
    If Cells(a, "G").Value Like "*H" Then
      Cells(a, "O").Value = "1"
    '『4』の場合:にはG列のセルの末尾が"Y"で、さらにH列に"12345"という数字がある場合です
    '(前には4桁あり、後ろには何もないか、1桁あります)
    ElseIf Cells(a, "G").Value Like "*Y" And Cells(a, "H").Value Like "12345*" Then
      Cells(a, "O").Value = "4"
    '『2』の場合:にはG列のセルの最後が"Y"もしくは"MMX"
    ElseIf Cells(a, "G").Value Like "*Y" Or Cells(a, "G").Value Like "*MMX" Then
      Cells(a, "O").Value = "2"
    '『3』の場合:にはH列のセルに"12345"という数字が
    '(前には4桁あり、後ろには何もないか、1桁あります)
    ElseIf Cells(a, "H").Value Like "12345*" Then
      Cells(a, "O").Value = "3"
    '『5』の場合:上記以外のものと、H列の頭にV7、後ろに3桁か4桁あるものです。
    ElseIf Cells(a, "H").Value Like "V7*" Then
      Cells(a, "O").Value = "5"
    Else
      Cells(a, "O").Value = "5"
    End If
    a = a + 1
  Loop

End Sub

【66873】Re:大至急 セル内のデータを一部を読み...
質問  あき  - 10/10/13(水) 22:35 -

引用なし
パスワード
   皆様
色々な解答をありがとうございます。
上手く動かすことが出来ました。

できれば、

H列の『○○○○12345○』を
『*12345*』を使わず、5桁目から5個取るという
形にしたいのですが、出来るのでしょうか?

出来るようでしたら是非こちらもお教えくださいませ。

【66875】Re:大至急 セル内のデータを一部を読み...
回答  Hirofumi  - 10/10/13(水) 23:17 -

引用なし
パスワード
   >G列のセルに4桁、H列のセルに5桁又は6桁入っています (両方アルファベットと数字の混合)

H列は、5 Or 6桁では無く8桁なのですか?

★1若しくは★2の様に書けば善いのでは

Option Explicit

Public Sub Test()

  Dim a As Long
  
  a = 1
  
  Do Until Cells(a, "H").Value = ""
    '『1』の場合:G列のセルの末尾が"H"
    If Cells(a, "G").Value Like "*H" Then
      Cells(a, "O").Value = "1"
    '『4』の場合:にはG列のセルの末尾が"Y"で、さらにH列に"12345"という数字がある場合です
    '(前には4桁あり、後ろには何もないか、1桁あります)
    ElseIf Cells(a, "G").Value Like "*Y" And Cells(a, "H").Value Like "????12345*" Then '★1
      Cells(a, "O").Value = "4"
    '『2』の場合:にはG列のセルの最後が"Y"もしくは"MMX"
    ElseIf Cells(a, "G").Value Like "*Y" Or Cells(a, "G").Value Like "*MMX" Then
      Cells(a, "O").Value = "2"
    '『3』の場合:にはH列のセルに"12345"という数字が
    '(前には4桁あり、後ろには何もないか、1桁あります)
    ElseIf InStr(1, Cells(a, "H").Value, "12345") = 5 Then '★2
      Cells(a, "O").Value = "3"
    '『5』の場合:上記以外のものと、H列の頭にV7、後ろに3桁か4桁あるものです。
    ElseIf Cells(a, "H").Value Like "V7*" Then
      Cells(a, "O").Value = "5"
    Else
      Cells(a, "O").Value = "5"
    End If
    a = a + 1
  Loop

End Sub

【66876】Re:大至急 セル内のデータを一部を読み...
回答  Hirofumi  - 10/10/13(水) 23:26 -

引用なし
パスワード
   後、

    ElseIf Mid(Cells(a, "H").Value, 5, 5) = "12345" Then '★3

でも

【66877】Re:大至急 セル内のデータを一部を読み...
発言  かみちゃん E-MAIL  - 10/10/14(木) 5:08 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>H列の『○○○○12345○』を
>『*12345*』を使わず、5桁目から5個取るという
>形にしたい

私が提示したコードの場合
*12345*

????12345*
とすればできると思います。

【66884】Re:大至急 セル内のデータを一部を読み...
お礼  あき  - 10/10/14(木) 19:09 -

引用なし
パスワード
   皆様、色々な解答を本当にありがとうございました。
無事に組むことが出来ました。
又、何度もお返事いただいた方も重ねて御礼申し上げます。

2619 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free