いつも勉強させてもらってます。
--コードSheet--
【A列】【B列】 【C列】
ID コード名 区分
D00034 ABCコード 未
D00035 DEFコード 新
D00036 GHIコード 変
D00037 JKLコード 変
--業務Sheet--
【A列】【B列】 【C列】
ID 進境具合 区分
D00035 かきくけこ 新
D00037 さしすせそ 新
--チェックSheet--
【A列】【B列】 【C列】 【D列】
ID コード名 コードSheet区分 業務Sheet区分
-----------
コードSheetのC列の値が"未"以外の文字(新・変)なら
A列(ID)の値を業務Sheetで検索して、
チェックSheetに記入します。
業務SheetのIDはコードSheetに無い場合もあります。
その場合はチェックSheetには【A列】【B列】【D列】のみ記入します。
思いつくがままに下記のように作ったのですが、
案の定上手くいかず、途中で煮詰まってしまいました。
アドバイスお願いします。
Dim myRange As Range
Dim r As Long, i As Long
Dim AiRow As Variant, BiRow As Variant
Dim CiRow As Variant, DiRow As Variant, EiRow As Variant
r = 2
i = 2
AiRow = Worksheets("コード").Cells(r, 1).Value 'コードID
BiRow = Worksheets("コード").Cells(r, 3).Value 'コード区分
CiRow = Worksheets("業務シート").Cells(i,1).Value '業務ID
DiRow = Worksheets("業務シート").Cells(i,3).Value '業務区分
Worksheets("コード").Activate
For r = 2 To Range("C" & Rows.Count).End(xlUp).Row
If Not BiRow = "P" Then
myRange = .Find(what:=Range(AiRow))
Worksheets("チェック").Range("A" & i) = AiRow
~中略~
Worksheets("チェック").Range("D" & i) = DiRow
End If
Next
No.1ベストアンサー
- 回答日時:
> 業務SheetのIDはコードSheetに無い場合もあります。
> その場合はチェックSheetには【A列】【B列】【D列】のみ記入します。
この意味が解りません。
チェックSheetのD列は業務Sheet区分ですよね?
コードSheetのIDを業務Sheetで検索して、無いのにどうやってD列を記入するのでしょう?
意味が解らないまま書いたので、違う可能性が大きいですが、、、
Sub Test()
Dim r As Range, tr As Range
Dim cdWs As Worksheet, gWs As Worksheet, chWs As Worksheet
Set cdWs = Worksheets("コード")
Set gWs = Worksheets("業務")
Set chWs = Worksheets("チェック")
For Each r In cdWs.Range("C2", cdWs.Range("C65536").End(xlUp))
If r.Value <> "未" Then
Set tr = chWs.Range("A65536").End(xlUp).Offset(1, 0)
r.Offset(0, -2).Resize(1, 3).Copy Destination:=tr
On Error Resume Next
tr.Offset(0, 3).Value = _
gWs.Range("C" & WorksheetFunction.Match(tr, gWs.Columns(1), 0)).Value
End If
Next r
End Sub
出来ました。
勉強になりました。有難うございました。
>チェックSheetのD列は業務Sheet区分ですよね?
>コードSheetのIDを業務Sheetで検索して、無いのにどうやってD列を記入するのでしょう?
本当ですね。C列の間違いですね。すいません。
No.2
- 回答日時:
私のコードは、最初にフィルタ・オプションで、必要なものを選り分けて、それを拾い出し、すべて配列の中に入れていきます。
次のシートもやはり、その配列を使って、該当する部分の場所に確保し、1度に、最後のシートで吐き出させてしまいます。#--チェックSheet--
#【A列】【B列】 【C列】 【D列】
# ID コード名 コードSheet区分 業務Sheet区分
4列ですから、配列の段階数は、4つ分にしました。しかし、配列の段階数の3段目は、Emptyでも、かならず4つのままにしてください。これは、レイアウトのためです。
なお、コードSheet区分を確保しても、何の支障もありません。
チェックシートは、貼り付けの前に、フィールドを残して、データは一旦削除されます。
難しいテクニックは1つも使われておりませんので、うまくない場合は、コードをたどって修正してください。
'標準モジュールに登録
Option Explicit
Sub MainCodeSheetPrc()
Dim MyCriteria As Range
Dim CodeShtRng As Range
Dim CodeArray() As Variant
Dim CodeShtArea As Range
Dim c As Range
Dim i As Long
Dim msgNum As Integer
'
With Worksheets("コード")
Set MyCriteria = .Range("AA1:AA2")
'Criteria の作成 '区分で 未でないもの'
MyCriteria = Application.Transpose(Array("区分", "<>未"))
Set CodeShtRng = .Range("A1", .Range("A65536").End(xlUp).Offset(, 2))
Application.ScreenUpdating = False
CodeShtRng.AdvancedFilter _
Action:=xlFilterInPlace, _
CriteriaRange:= _
MyCriteria
'
On Error GoTo ErrMsg
Set CodeShtArea = CodeShtRng.Offset(1). _
Resize(CodeShtRng.Rows.Count - 1, 1). _
SpecialCells(xlCellTypeVisible)
For Each c In CodeShtArea
ReDim Preserve CodeArray(3, i)
CodeArray(0, i) = c.Value 'コードID
CodeArray(1, i) = c.Offset(, 1).Value 'コード名
'※不要
'CodeArray(2, i) = c.Offset(, 2).Value 'コード区分 ※
i = i + 1
Next
.ShowAllData
End With
ErrMsg:
Set CodeShtRng = Nothing: Set CodeShtArea = Nothing
MyCriteria.ClearContents
Application.ScreenUpdating = True
If Err.Number > 0 Then
MsgBox "コードシートには対象のコードが見つかりません。", 16
Exit Sub
End If
On Error GoTo 0
Call GyomuSheetPrc(CodeArray())
End Sub
'
Private Sub GyomuSheetPrc(CodeArray() As Variant)
Dim GyomuShtRng As Range
Dim i As Long
Dim rtn As Variant
With Worksheets("業務シート")
Set GyomuShtRng = .Range("A1", .Range("A65536").End(xlUp))
For i = LBound(CodeArray, 2) To UBound(CodeArray, 2)
rtn = Application.Match(CodeArray(0, i), GyomuShtRng, 0)
If Not IsError(rtn) Then
CodeArray(3, i) = .Cells(rtn, 3).Value '業務区分
End If
Next i
End With
Call CheckSheetPrc(CodeArray)
End Sub
'
Private Sub CheckSheetPrc(CodeArray() As Variant)
With Worksheets("チェック")
.Range("A2", .Range("A65536").End(xlUp)).Offset(, 3).ClearContents
.Range("A2").Resize(UBound(CodeArray, 2) + 1, 4).Value = _
Application.Transpose(CodeArray) '貼り付け
.Select
End With
MsgBox "終了", 64
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) VBAで日付入力しているのですが 4 2023/03/02 11:25
- Visual Basic(VBA) VBAで教えて頂きたいのですが? 1 2022/04/29 02:36
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBAで時間(00:00形式)を積算(足し算)したい 1 2022/11/15 17:04
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パワポで曲がった両矢印の簡単...
-
パワーポイント「スライドショ...
-
パワーポイントの表
-
Power pointって、スクリーンに...
-
音声マークを一括非表示にしたい。
-
パワーポイント2019 図の透...
-
パワーポイントで、プレゼン用...
-
画面写真でコピーペーストする...
-
Powerpointを用いた論文の発表...
-
【パワーポイントのフォントが...
-
パワーポイントにページ番号を...
-
COUNTIFのやり方を教えてくださ...
-
パワーポイント、四角い枠の中...
-
プレゼン時のポインター
-
PowerPoint2007を使用していま...
-
教えてgooのスマホアプリ
-
【パワポ初心者の大学生におす...
-
canvaでつくったプレゼン資料を...
-
ホワイトボード 油性マジックの...
-
Power point で、アニメって作...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワポで曲がった両矢印の簡単...
-
パワーポイントの表
-
パワーポイント「スライドショ...
-
音声マークを一括非表示にしたい。
-
ホワイトボード 油性マジックの...
-
エクセル・パワーポイントなど...
-
パワーポイントで、プレゼン用...
-
PowerPointVBAでスライドマスタ...
-
PowerPointでスライドマスタの...
-
Power point で、アニメって作...
-
パワポ初心者で申し訳ありませ...
-
PowerPointで、作成されたファ...
-
パワーポイントで資料を作る時 ...
-
【パワーポイントのフォントが...
-
パワーポイントのアニメーショ...
-
ExcelのグラフをPowerPointに貼...
-
パワーポイント2019 図の透...
-
パワーポイントで、全てのスラ...
-
PowerPointのアニメーションで...
-
PowerPointで、線を点滅した感...
おすすめ情報