dポイントプレゼントキャンペーン実施中!

以下プログラムです。

Sub kintaiH()
Dim FileName2 As String, FileName3 As String
Dim fl2 As Workbook, fl3 As Workbook
Dim wb As Workbook
Dim wScriptHost As Object
Dim j As Long, lastRow As Long

Set wScriptHost = CreateObject("WScript.shell")
ChDir wScriptHost.specialFolders("Desktop")
FileName2 = Application.GetOpenFilename
Set fl2 = Workbooks.Open(FileName:=FileName2)

fl2.SaveAs FileFormat:=xlNormal

Range("B:C").Insert ' 2~3列目に列を挿入します
Range("B1") = "社員番号" 'B1セルに社員番号の文字列を入れる。
Range("C1") = "資格" 'C1セルに資格の文字列を入れる。

FileName3 = Application.GetOpenFilename
Set fl3 = Workbooks.Open(FileName:=FileName3)

fl3.Sheets("社員名簿").Copy _
Before:=fl2.Sheets(1)

fl3.Close False '上書き保存するなら True で

Set fl3 = Nothing 'Set fl2 = Nothing '解放したいけどBookは開いたまま?

Set wb = ActiveWorkbook
With Worksheets(2)
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row

'Vlookup処理
With Range(.Cells(2, "B"), .Cells(lastRow, "B"))
.Formula = "=VLOOKUP($A2,社員名簿!$B:$H,COLUMN(B1),false)"
.Value = .Value
End With
With Range(.Cells(2, "C"), .Cells(lastRow, "C"))
.Formula = "=VLOOKUP($A2,社員名簿!$B:$H,COLUMN(G1),false)"
.Value = .Value
End With

'//▼列の非表示//
For j = 1 To .Cells(1, Columns.Count).End(xlToLeft).Column
If .Cells(1, j) = "予定始業時間" Or .Cells(1, j) = "予定終業時間" Then
.Columns(j).Hidden = True
End If
Next j
End With

'B列基準に昇順で並び替え
Range("A1").CurrentRegion.Select
ActiveSheet.Sort.SortFields.Add Key:=Range("B2"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

End Sub

※下から4行目から表の並び替えをしたいのですが、うまくいきません。
エラーは出ないようなのですが。ネット等で色々調べたのですが。。。
どなたか教えて頂けたら幸いです。

質問者からの補足コメント

  • どう思う?

    セルB1にヘッダーがありB2からB列下までは数字が入っていまして(データがある行まで)をB1をキーにして昇順にて並び替えをしたいです。

      補足日時:2018/02/08 09:41

A 回答 (4件)

ん~~~



細かい原因はこちらでは把握しかねますが・・・
今回投稿したコードはすべて無視し、お示しのコードの
最後の3行(End Subより前)を

Range("A1").CurrentRegion.Select Key1:=Range("B1"), order1:=xlAscending, Header:=xlYes

だけにしたらどうなりますか。

一つ気になるのはこの並び替え部分に関してSheetを指定していませんね。
上記コードの前に「.」ドットを加え、なおかつ並び替え前の行の
>End With
を最後に持ってきて

.Range("A1").CurrentRegion.Select Key1:=Range("B1"), order1:=xlAscending, Header:=xlYes
End With

としてみたらどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

できました。
シートをアクティベートにしたらできました。
本当に感謝感謝致します!

お礼日時:2018/02/08 15:54

続けてお邪魔します。



結局1行目が項目行でB列をキーに昇順に並び替えたい!というコトですね。
↓のコードにしてみてください。

Sub Sample3()
Dim lastRow As Long, lastCol As Long
lastRow = Cells(Rows.Count, "B").End(xlUp).Row '//←B列で最終行取得//
lastCol = Cells(1, Columns.Count).End(xlToLeft).Column '//←1行目で最終列取得//
Range(Cells(1, "A"), Cells(lastRow, lastCol)).Sort key1:=Range("B1"), order1:=xlAscending, Header:=xlYes
End Sub

こんどはどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとうございます。
コードを2つ(私が作成した分と上記分)を開いたままの状態で順番に動かすと正常に作動します。
ただマクロボタンを2つでそれぞれ押すと2つめで以下メッセージが出ます。

実行時エラー '1004:
並び替えの参照が正しくありません。参照が並び替えるデータ内にあることと、「最優先されるキー」ボックスうが空白でないことを確認してください。

できればひとつのマクロボタンで全て動くのが理想ですが、難しいですかね。

お礼日時:2018/02/08 13:30

No.1です。



投稿後もう一度質問文を読み返してみて・・・
>下から4行目から表の並び替えをしたいのですが

もしかして、最後の4行だけの並び替えをしたい!という意味なのでしょうか?
そうであれば

Sub Sample2()
Dim lastRow As Long, lastCol As Long
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
lastCol = Cells(lastRow - 3, Columns.Count).End(xlToLeft).Column
Range(Cells(lastRow - 3, "A"), Cells(lastRow, lastCol)).Sort key1:=Cells(lastRow - 3, "B"), order1:=xlAscending, Header:=xlNo
End Sub

としてみてください。

※ 今回はA列で最終行・最後から4行目で最終列を取得するようにしています。m(_ _)m
    • good
    • 0
この回答へのお礼

すみません、言葉足らずでした。
最後の4行目というのはコードのことでして、
下記コードで

'B列基準に昇順で並び替え
Range("A1").CurrentRegion.Select
ActiveSheet.Sort.SortFields.Add Key:=Range("B2"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

で表全体をB2をキーにして昇順にて並び替えをしたいということです。

お礼日時:2018/02/08 09:21

こんにちは!



お示しのコードは詳しく見ていません。
並び替えだけのコードです。
尚、A列で最終行・4行目で最終列を取得するようにしていますので、
A列は最終行まで、4行目は最終列まで何らかのデータが入っているという前提です。

Sub Sample1()
Dim lastRow As Long, lastCol As Long
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
lastCol = Cells(4, Columns.Count).End(xlToLeft).Column
Range(Cells(4, "A"), Cells(lastRow, lastCol)).Sort key1:=Range("B4"), order1:=xlAscending, Header:=xlNo
End Sub

※ 普通は項目行があると思うのですが、質問文に4行目から並び替えをしたい!とありますので、
項目行云々は無視して、4行目以降がB列をキーに昇順に並び替えられるはずです。m(_ _)m
    • good
    • 0
この回答へのお礼

すみません、言葉足らずでした。
最後の4行目というのはコードのことでして、
下記コードで

'B列基準に昇順で並び替え
Range("A1").CurrentRegion.Select
ActiveSheet.Sort.SortFields.Add Key:=Range("B2"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

で表全体をB2をキーにして昇順にて並び替えをしたいということです。

お礼日時:2018/02/08 09:22

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