| 
    
     |  | つっこみどころがいくつかあります。 
 型の不一致ですが、それは、pos1が結合セルの場合、
 pos1.Valueが配列になるからです。
 
 配列と一つの値を = で比較することはできません。
 
 まずそのことを念頭におくと、
 Set pos1 = Cells(pos1row, pos1col).MergeArea
 Set pos1 = pos1(1)
 としてしまう方法があります。
 (最初だけでなく、複数箇所変更が必要です)
 
 その他。
 
 (1)1行ずつ行送りすると無駄かもしれない。
 pos1row = pos1row + sh1.Cells(pos1row, pos1col).MergeArea.Rows.Count
 とするとよいかも。
 
 (2) name1,name2などを繰り返しの中で定義する必要はない。
 
 (3) memo = "ee" などとダイレクトに文字をコードに書くなら、
 name1 などと変数を使わないほうが直感的かもしれない。
 memo に書き込む値も文字列変数で定義するか、いずれ統一が必要。
 
 (4)Case Is = name1 は、普通は Case name1 で良い。
 
 (5)投稿にあたっては、コピーペイストしてください。
 memo = bb1" & Right(pos1.Offset(, 3).Value, 5) & "bb2" _
 & Left(pos1.Offset(, 3).Value, 4) & "bb3"
 などというのはコンパイルエラーになる。
 (6)インデントが恣意的です。タブを使ってください。
 
 |  |