ExcelのVBAについてです。シート1と2を作成
ExcelのVBAについてです。シート1と2を作成し、シート1にバーコードまたはキーボードで入力します。シート1は入力専用かつ入力した分の早見表で、実際にはシート2に転記仕訳して、シート3以降に表を作成したいです。使い方はシート1に入力またはシート2をタップまたはクリックすると入力(画面)になります。以前の質問の回答を参考に必要最低限に改良しています。パッと見で構いません、何か不具合は見付からないでしょうか?
'///Sheet1///
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim time7 As Range
For Each time7 In Target
If time7.Column = 1 Then
time7.Offset(0, 4).Value = Format(Now, "Short Time") & vbCrLf & _
Format(Now, "yyyy/mm/dd hh:nn:ss AM/PM")
End If
Application.EnableEvents = False
Application.EnableEvents = True
Next time7
'(1)シートを変数にセット
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws1 = Worksheets("Sheet1")
Set ws2 = Worksheets("Sheet2")
'(2)シートを指定してデータを転記
ws2.Range("A3:H3").Value = ws1.Range("A3:H3 ").Value
End Sub
Private Sub Worksheet_Activate()
'
' 新規行挿入
'
'
Worksheets("Sheet2").Range("3:3").Insert
Sheets("Sheet1").Range("H3").Select
ActiveCell.FormulaR1C1 = "5"
Sheets("Sheet1").Range("E3").Select
Selection.ClearContents
Dim str_Left As String
'セルE4に文字列、セルH4に数字を予め入れておくこと。
str_Left = Left(Cells(4, 5), Cells(4, 8))
MsgBox str_Left & vbCrLf & " " & "OKボタンを押してください!"
Sheets("Sheet1").Range("A3").Select
Dim se_r As String
se_r = Application.InputBox("バーコードを入力してください")
Select Case se_r
Case "False"
MsgBox "キャンセルされました"
Case ""
MsgBox "空欄が入力されました"
Case Else
Range("A3").Value = se_r
End Select
End Sub
' ///Sheet2///
Private Sub Worksheet_Activate()
Dim Emp(1 To 300) As String
Dim msg As String
Dim i, i2, Cnt As Integer
Dim N_In As Variant
For i = 3 To 3
If IsEmpty(Cells(i, 1).Value) = False Then 'ここで空欄判定
Worksheets("Sheet1").Range("3:3").Insert '対象セルアドレスを改行処理
End If
'(1)シートを変数にセット
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim st1, s, i3 As Long
Dim Bst As Range
Set ws1 = Worksheets("Sheet1")
Set ws2 = Worksheets("Sheet2")
'(2)シートを指定してデータを転記
st1 = ws1.Cells(Rows.Count, "E").End(xlUp).Row 'A列の最終行を設定する
s = 3
For i3 = 3 To st1
Set Bst = ws2.Columns("E").Find(What:=ws1.Cells(i3, "E"), LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
シート間のE列を比較
If Bst Is Nothing Then '比較して無い場合は、下記を実行
ws1.Cells(s, "A") = ws1.Cells(i3, "A") '追加する文字を転記する。(コード)
s = s + 1
End If
Next i3
Next i
'(1)シートを変数にセット
Dim ws1_ As Worksheet
Set ws1_ = Worksheets("Sheet1")
ws1_.Activate
End Sub
お礼
ありがとうございます。完璧です!