こんにちは。
>そこでひとつ飛ばしにデータを入れる形をとればうまく収まると考えて上記の質問を行った次第です。
確かに、昨日の並べ替えと同じように、言葉では、そのとおりには違いないのですが、やはり普段私などが書くコードと違ってきます。そのままでは、うまくいかないと思います。早い話、セル指定しないといけないということです。(それ以外は分かりません)
論より証拠です、以下をみてください。
書き出し位置に関しては、もう一度点検してください。
'---------------------------------------------------------------------------
'<標準モジュール>
Sub PickUpSort4()
Dim Cr1 As Variant, Rng As Range, ret As Variant
Dim i As Long, j As Long, k As Long, c As Range, myData() As Variant
Dim myDataI As String
'最初のシート
With Worksheets("Sheet2")
.Select
'フィルターモードの解除
' If Not .AutoFilter Is Nothing Then
' .AutoFilter.Range.AutoFilter
' End If
'オートフィルタの範囲の取り直し(範囲の固定でも良い)
Set Rng = .Range("B1", Range("B1").End(xlDown).Offset(, 4))
Do
Cr1 = Application.InputBox("1~18までの数字を入れてください", Type:=2)
'
If VarType(Cr1) = vbBoolean Or Cr1 = "" Then
Exit Sub
ElseIf CLng(Cr1) < 1 Or CLng(Cr1) > 18 Then
MsgBox "1~18までの数を入れてください", vbInformation
End If
Loop Until CLng(Cr1) > 0 And CLng(Cr1) < 19
'オートフィルタ
Worksheets("Sheet1").Range("U5").Value = Cr1
Rng.AutoFilter _
Field:=4, _
Criteria1:="=" & Cr1 & "-*", _
Operator:=xlOr, _
Criteria2:="=" & "*-" & Cr1
'
'検索数のチェック
'B2~下にチェック
ret = Application.Subtotal(3, Range(Cells(2, 6), Cells(2, 6).End(xlDown)))
If ret = 0 Then
MsgBox "該当のものがなかったようです。", vbInformation
Exit Sub 'なかったら終了
End If
On Error Resume Next
'Cells(2,5 ) = E2 ~
For Each c In .Range(Cells(2, 5), Cells(2, 5).End(xlDown)). _
SpecialCells(xlCellTypeVisible)
ReDim Preserve myData(k)
myData(k) = c.Value
k = k + 1
Next c
'データ貼り付け U11~
Worksheets("Sheet1").Range("U11").Resize(, 17).Value = myData(i)
'-以降・以前の文字抜き出し
For j = 0 To 18 '配列用に 17 = 18-1 (データは、18個)
myDataI = Application.Substitute(myData(j), Cr1 & "-", "")
myDataI = Application.Substitute(myDataI, "-" & Cr1, "")
'Cell(5,21) = U-V ~ 結合セルに対して
Worksheets("Sheet1").Cells(5, 21 + j * 2).Value = myDataI
Next
End With
Set Rng = Nothing
Beep '終了の合図
End Sub
'---------------------------------------------------------------------------
最後に、
「後出しで、「結合セル」の話を言うと、複数の人にクレームが付けられるくらい……」、コードを書いている人ならともかく、このクレームをする人たちが、一体、どのぐらいの裏付けがあるのかは私には分かりません。私の知っている限りでは、Microsoft社(本社)が、結合セルのあるシートでエラーが起こる問題に対して、97以降、ずっとまったく手付かずにいるということは確かです。
>追伸:昨日締め切った並べ替えの件ですが、やはり今職場でブックを開いてリストを見るとちゃんとあるんです。なんで家のパソコンだとなくなるのでしょうか?不思議です。
入れた並び替えリストがなくなるということですね。
システムや一部のフォルダやファイルに保護機能をつけていませんか?
お礼
試行錯誤(いろいろ手直し)した結果、またまたうまくいきました。 ありがとうございました。 並び替えリスト-保護機能の件に関しては、後日確認してみます。 Wendy02さんに教えていただいたマクロを、同じ操作で今度は別のセルを対象に続けて行いたい場合、そのまま同じプロシージャ内(モジュール内?)にそのままコピペして数字だけ変えようとしたら、コンパイルエラー「同じ適用範囲内で宣言が重複しています」とでます。 決まりでだめなんだな~というのは理解できますが、その場合変数を変更していって土壷にはまりそうなので(実際やりかけて失敗しました)、それぞれを別のプロシージャ内に記述しつつ、一つ目が終わったらCallステートメントを使って次のプロシージャを呼び出してマクロを実行させたほうがいいのでしょうか?(といってもCallステートメントを使ったことがないので自信がないですが・・・) 他の方の質問にも精力的に回答されているようなので、無理にお返事は要求いたしません。 私もおとといから昨日にかけて体がだるかった(風邪を引きかけた)のですが、回復したようです。Wendy02さんもお体にはご自愛くださいませ。