アプリ版:「スタンプのみでお礼する」機能のリリースについて

下記の条件で下記のようなマスターを参照してマクロを作成したいのですが、どのように記述したら良いでしょうか

シート名 滞留在庫表
条件
c列の5行目からdataが入っています。data例(AD1200S0110000000P)18桁
dataの頭8桁目がBの場合はL221をV列に表示
dataの頭8桁目が、A又はM又Pの場合はL222をV列に表示
dataの頭8桁目がB、A、M、P以外の場合は、ブランクをV列に表示

シート名 表示再設定マスタ
            A列    B列
5行目******************
6行目*******B********** L221
7行目*******A********** L222
8行目*******M********** L222
9行目*******P********** L222

A 回答 (5件)

こんにちは。

KenKen_SP です。

ご質問文には矛盾があって判断にまようのですが、コードを書いて
みました。お試し下さい。

Sub Sample()

  Dim lngLastRow As Long
  Dim i As Long
  Dim varTmp As Variant
  Dim strResult As String
  
  Application.ScreenUpdating = False
  With Sheets("マスター")
    lngLastRow = .Range("C5").End(xlDown).Row
    For i = 5 To lngLastRow
      varTmp = .Cells(i, "C").Value
      If Not IsEmpty(varTmp) Or Len(varTmp) = 8 Then
        Select Case Mid$(varTmp, 8, 1)
          Case Is = "B"
            strResult = "L221"
          Case Is = "A", "M", "P"
            strResult = "L222"
          Case Else
            strResult = ""
        End Select
        .Cells(i, "V").Value = strResult
      End If
    Next i
  End With

End Sub
    • good
    • 0

こんにちは。



こちらも見ました。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1543585

きちんとした全体的な内容を書かないと、マクロが必要なのか分かりません。

私が、#3 で書いた内容を移植しました。
なお、セルには、VBAから、 nullchar ""  は、入らなかったはずですね。どうしても必要なら、Formula から入れる必要がありますね。

Sub TestSample()
 Dim c As Range
 Dim num As Integer
 'C5 を起点とした場合
 For Each c In Range("C5", Range("C65536").End(xlUp))
  num = InStr("BAMP", Mid(c.Value, 8, 1))
  If num > 0 Then
  'V列
  If num = 1 Then c.Offset(, 19).Value = "L221"
  If num > 1 Then c.Offset(, 19).Value = "L222"
  Else
  c.Offset(, 19).Formula = "="""""
  End If
 Next
End Sub
    • good
    • 0

VLOOKUP関数でできます。


VBAでVLOOKUP関数を使っても簡単です。何よりどんなに複雑な
規則性のない対応でもテーブルを作ってしまえばOKです。
A1:A5に
******************
*******B********** L221
*******A********** L222
*******M********** L222
*******P********** L222
とあるとします。
B列B1に=VLOOKUP(MID(A2,8,1),$G$2:$H$5,2,FALSE)
と入れてB5まで複写します。
G2:H5に
BL221
AL222
ML222
PL222
を作ります。
これだと表に該当なしの場合はエラーになるので
=IF(ISERROR(VLOOKUP(MID(A7,8,1),$G$2:$H$5,2,FALSE)),"",VLOOKUP(MID(A7,8,1),$G$2:$H$5,2,FALSE))とします。
    • good
    • 0

こんばんは。


マクロでなくても出来るような気がしますね。

V5~
=IF(ISERROR(FIND(MID(C5,8,1),"BAMP")),"","L22"&1+(FIND(MID(C5,8,1),"BAMP")>1)*1)

データがA列だったら、
C5 →A5 に直してください。
なお、大文字・小文字の区別があります。
    • good
    • 0

B列(B6)に



=IF(MID(A6,8,1)="B","L221",IF(MID(A6,8,1)="A","L222",IF(MID(A6,8,1)="M","L222",IF(MID(A6,8,1)="P","L222",""))))

を入れ下方向へコピーします。

>c列の5行目から
はa列ですよね?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!