アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルでデータベースみたいなのを作りました。
委託先からのデータの必要な部分だけ取り出す。というものですが、
今度は、その必要なデータの必要なレコードに新たにデータを追加する作業が起きました。

データは従業員のもので、E列が社員番号、J列が氏名で、最終データがELB列まで使っています。
社員番号から個人のレコードを抽出して、ELC列とELD列に判定テキストを入力したいのです。
ELC「○○」、ELD「評価者××」という具合です。

エクセル画面で社員番号を確認しながら、ELC列にコメントを書いていくなんて、
時間がかかりすぎるし、間違いやすいので、どうにかならないかと考えています。

エクセルをアクセスのようにして入力することもできたと思いますが、
その方に良い方法がありましたら、詳しい方教えて下さい。

今後も追加するデータが出てくるかも知れないので、汎用性のある方法でお願いします。

A 回答 (7件)

>エクセル画面で社員番号を確認しながら、ELC列にコメントを書いていくなんて、時間がかかりすぎるし、間違いやすいので、どうにかならないかと考えています。


社員番号で検索すれば、即時に表示できると思いますが、
【検索】機能では何か不都合があるのですか?
    • good
    • 1

大変申し訳ありません


デバッグせず投稿してしまいました
めちゃくちゃになってしまいましたが
VBAコードは下記に書き換えてください

Sub sample_01()
Dim dSht As Worksheet
Dim sSht As Worksheet
Set dSht = Worksheets("データベース")
Set sSht = Worksheets("追加設定シート")
Dim employee_number As Range
Dim getCell As Range
Dim colm1 As String, colm2 As String
colm1 = sSht.Range("B1").Value
colm2 = sSht.Range("C1").Value
If colm1 = "" Or colm2 = "" Then MsgBox "列を指定してください": Exit Sub
For Each employee_number In sSht.Range("A3", sSht.Cells(Rows.Count, "A").End(xlUp))
Set getCell = dSht.Range("E1", dSht.Cells(Rows.Count, "E").End(xlUp)) _
.Find(What:=employee_number.Value, LookIn:=xlValues, LookAt:=xlWhole)
If Not getCell Is Nothing Then
With employee_number
If .Offset(, 1) <> "" Then dSht.Cells(getCell.Row, colm1).Value = .Offset(, 1).Value
If .Offset(, 2) <> "" Then dSht.Cells(getCell.Row, colm2).Value = .Offset(, 2).Value
End With
End If
Next
End Sub
    • good
    • 0

ごめんなさい


Dim データベース As Worksheet
Dim 追加設定シート As Worksheet

Dim dSht As Worksheet
Dim sSht As Worksheet
に書き換えてください
    • good
    • 0

こんばんは


良い方法かは分かりませんが
VBAが使える環境ならVBAで処理をするのが簡単かな

① 1シート追加しておきます 仮称 追加設定シート
これは条件を書き込むシートで他のファイルなどからコピペするなどで使う?

② 処理をするシート >エクセルでデータベースみたいなのを
仮称 データベースシート

振り分け条件など、詳細が分ればすべて自動化できると思いますが・・
取り合えず
①の表組 図
①のシートにボタン設置
VBAプロシージャ (標準モジュール)をボタンに登録

Sub sample_01()
Dim データベース As Worksheet
Dim 追加設定シート As Worksheet
Set dSht = Worksheets("データベース")
Set sSht = Worksheets("追加設定シート")
Dim employee_number As Range
Dim getCell As Range
Dim colm1 As String, colm2 As String
colm1 = sSht.Range("B1").Value
colm2 = sSht.Range("C1").Value
If colm1 = "" Or colm2 = "" Then MsgBox "列を指定してください": Exit Sub
For Each employee_number In sSht.Range("A3", sSht.Cells(Rows.Count, "A").End(xlUp))
Set getCell = dSht.Range("E1", dSht.Cells(Rows.Count, "E").End(xlUp)) _
.Find(What:=employee_number.Value, LookIn:=xlValues, LookAt:=xlWhole)
If Not getCell Is Nothing Then
With employee_number
If .Offset(, 1) <> "" Then dSht.Cells(.Row, colm1).Value = .Offset(, 1).Value
If .Offset(, 2) <> "" Then dSht.Cells(.Row, colm2).Value = .Offset(, 2).Value
End With
End If
Next
End Sub
「エクセルで沢山のレコードの最後に追記する」の回答画像4
    • good
    • 0

こんにちは



正確な状態がさっぱりわかりませんけれど・・・
社員番号に対応するELC列(?)に何かを入力したいのだと解釈しました。

元データが既にデータとして存在するのか、手入力で一つ一つ入力するつもりなのかも不明ですが・・・

1)まず、入力内容だけを、データとして別シートにでも一覧的に表にします。
2)転記したい(=実際に入力したい)列に、関数で検索して表示させます。
3)対象列を選択して「コピー」-「値をペースト」で固定値化します。
以上で、人間が検索する手間はなく可能と思います。
    • good
    • 0

>対象を呼び出して追記する形です。



セル値の検索(例:Findメソッド)方法はありますし、

>J列の社員名を確認して、ELC列以降にコメントを入れたいのです。

追記?
検索した結果FindメソッドであればRangeオブジェクトが得られる(見つかればですが)ので行番号はわかるかと。
あとは列に対して入れたい値をユーザーフォームのTextBox(数個)に打ち込んだ物を順次代入すれば良いかと感じたのですが・・・
    • good
    • 0

ユーザーフォームに入力してシートに転記


https://kokodane.com/macro31.htm

データベース的な物を作成されたのなら使用されてませんか?
どこのセルに代入させるかはコードで行ない、作業者自身が触る事なく出来るようにする。
個数を増やせば汎用が効くのではないかなと。
    • good
    • 0
この回答へのお礼

うーん・・・

ありがとうございました。
委託先は専用ソフトを使用しており、自社のデータをエクセルに落としたものを受け取っています。
そこで自社データを追記するのですが、E列の社員番号から、J列の社員名を確認して、ELC列以降にコメントを入れたいのです。
単なるレコードの追加ではなく、対象を呼び出して追記する形です。

お礼日時:2023/04/10 14:36

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