• ベストアンサー

VBAでMIDとFor~を使用したループがどうしても作成できません

A        B       C        D 商品コード  バーコード  未入荷コード  誤入荷コード 1234      ka1234bc            5342 1236      kh1236hc 2734      as3642hf 8512      gd2734hf    8512 3642      gf5342hd 1.バーコードの順番は商品コードの順番とは異なる 2.バーコードの文字からアルファベット部分取り除きたい 3.未入荷の商品は商品コードと同じ行に表示したい 4.誤入荷コードは先頭行から表示をしたい 5.商品コードの行数とバーコードの行数は必ずしもイコールではない 6.商品コード・バーコードの行数は300~500くらい こんな事をVBAで作成しようと奮闘しているのですが素人&初心者な私には全くと言っていいほど作成が前に進みません。 どなたかご教授を願えませんでしょうか。

この投稿のマルチメディアは削除されているためご覧いただけません。

質問者が選んだベストアンサー

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

#2です。 バーコードの数字部分が同じ位置であれば、 Sub try() Dim myDic As Object Dim r As Range, rr As Range Set myDic = CreateObject("Scripting.Dictionary") Application.ScreenUpdating = False For Each r In Range("B2", Cells(Rows.Count, 2).End(xlUp)) myDic(Mid(r.Value, 3, 4) * 1) = Empty Next For Each rr In Range("A2", Cells(Rows.Count, 1).End(xlUp)) If myDic.Exists(rr.Value) Then myDic.Remove (rr.Value) Else rr.Offset(, 2).Value = rr.Value End If Next If myDic.Count <> 0 Then Range("D2").Resize(myDic.Count, 1).Value = _ Application.Transpose(myDic.keys) End If Application.ScreenUpdating = True Set myDic = Nothing End Sub とか?

takaboo191
質問者

お礼

n-jun様 改訂版ありがとうございます。 意図する結果ではなかったのですが、今後の為にも印刷して構文の意味を勉強しようと思います。そしてn-jun様に頂いたコードを参考にしながら完成させようと思っています。 ただ・・・・・難しい>< もっともっと勉強していきたいと思います。 このたびはありがとうございました。 またわからなくなっていきずまったら質問させてください

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.5

#3です。 >myDic(Mid(r.Value, 3, 4) * 1) = Empty myDic(Mid(r.Value, 2, 10) * 1) = Empty に変更して下さい。

takaboo191
質問者

お礼

n-jun様 お返事遅れまして申し訳ございませんでした。 結局、社長を説得したのと、比較的安く作成してくれる業者が見つかったので、そちらにお願いすることになりました。 いろいろとお知恵を貸していただきましてありがとうございました

全文を見る
すると、全ての回答が全文表示されます。
  • hige_082
  • ベストアンサー率50% (379/747)
回答No.4

質問がよく分からんけど Sub test() Dim i As Long, ii As Long Range("a2", Cells(65336, 1).End(xlUp)).Copy Range("c2").PasteSpecial Application.CutCopyMode = False For i = 2 To Cells(65536, 2).End(xlUp).Row For ii = 2 To Cells(65536, 1).End(xlUp).Row If Cells(ii, 1) = CInt(Mid(Cells(i, 2), 3, 4)) Then Cells(ii, 3) = "" Exit For End If Next ii If ii > Cells(65536, 1).End(xlUp).Row Then Cells(65536, 4).End(xlUp).Offset(1, 0) = Mid(Cells(i, 2), 3, 4) End If Next i End Sub 多分外してるけどね n-junさんのコードには、かないません

takaboo191
質問者

お礼

hige_082様 ご回答ありがとうございます。 n-jun様とは違ったコードですが、こちらも同様1行1行構文の意味を理解しながら勉強していきたいと思っています。 ご回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

#1です。 バーコード表に ab1234cd ef1234gh と言うように、コードとしては別でも数字部分が同じ場合があるかどうかなんですけど。 >Range("B1").Value = Mid(okikae, 2, 10) 文字数は一定でしたか。 不定かと思って回答してみました。

takaboo191
質問者

お礼

n-jun様 ご説明が不十分で申し訳ございませんでした

全文を見る
すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

バーコードの数字部分を抜き出すのなら、 Sub try() Dim RegExp As Object Dim st As String Set RegExp = CreateObject("VBScript.Regexp") RegExp.Pattern = "\D+" RegExp.Global = True st = "abc12345def" MsgBox st & " の数字部分は " & RegExp.Replace(st, "") Set RegExp = Nothing End Sub こんなやり方もありますけど、抜き出した数字が重複するような事があるかどうかで変わってくるかも。

takaboo191
質問者

お礼

n-jun様 上記コードを試して早速みました。msgboxでは「12345」は表示されました。 しかし数字を抜き出すだけなら私にもできたのです。 Sub mojiokikae() Dim okikae As String okikae = Sheets(1).Cells(1, 2).Value Range("B1").Value = Mid(okikae, 2, 10) End Sub こんな感じで1行だけなら抜き出せるのですが、次行へループさせていくところで躓きました。 そしてこの先に苦難が待ってる事も予想してます。。。 回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • バーコードだけを 作成したいのですが・・

    商品管理のために バーコードだけを作成したいのですが・・特に機能面では それ以上は必要ありません。 49コードの 13桁 コードナンバーを打ち込めば バーコードが表示でき 印刷ができるもの ありませんか? 文字 大きさは 設定可能ならばいうことないのですが・・

  • VBA 表作成 再 続

    引き続きよろしくお願いします。 入力データというブックがありそこには B列に日付と曜日(日付の下)3行目~、 M列に区分(1か2が入力)3行目~、 T列に商品名3行目~、 AQ列に商品数3行目~、 BA列4行目~にコードが入力されています。 日付を入力したブックに 入力データにある、日付の部分を見て入力フォームで日付から1ヶ月の間の日付で一致すれば、商品名、コードを別ブックにある表に貼り付けます。日付部分の表に数値を商品名とコードにあわせて貼り付け、日付も、商品名もコードも同じであれば足してから表示します。 元にあるのはひとつ分しかはいらないので増えるたびに行数を挿入していくようにします。 最初にある表は    B   M   L ・・・ 4          日付・・・ 5          曜日・・・ 6  商品名 コード 数値・・・ 7          小計・・・ 8  商品名 コード 日付・・・ 9          小計・・・  10         合計・・・ という表になっています。上段には区分1、下段には区分2のものが入ります。 わかりますかね・・・;; 説明下手で申し訳ありません よろしくお願いします

  • VBA いらない行の非表示

    お世話になります 添付画像のように、ドライバーが持ち出す荷物の数量チェックを行う為にExcelにてチェック表を作成して利用しておりました 実際にはもっと多くのドライバーと持ち出す荷物の種類があるので、印刷する枚数が多くなってしまいます そこで、ドライバーが持ち出す荷物の個数と、商品が1111というコードの物とまだ商品が入っていない未入荷の物だけが明細として表示される物に作り替える要望が出てきました 1つの条件だけならフィルターをかけて非表示にすれば良いのですが、今回のように商品列が1111または入庫状況列が未入庫の場合には非表示にしないという条件にマッチしている場合、その行は非表示にしないという処理をするには、どのようなコードを作れば良いのでしょうか? よろしくお願い致します

  • VBAで表作成中解らないことだらけ・・・ひとつずつ教えてください。

    ブックの種類 入力フォーム→日付を設定するフォーム画面です。 book→予め出来ている表(B5・B7・B9・B10・I5はタイトル?になります)    B  I   L ・・・ 4         日付・・・ 5 商品名 コード 曜日・・・ 6 商品名 コード 数値・・・ 7   小計    数値・・・ 8 商品名 コード 数値・・・ 9   小計    数値・・・ 10  合計    数値・・・ 入力データ→日付(曜日)、区分、商品名、商品数、コードが表になっています。 まず入力フォームで日付をセットします。 次にbookに入力フォームで入力した日付から1ヶ月間を表示させます。 (1) 日付設定表に設定日付をキーにして入力データブックより検索 (2) 検索日付が一致すれば、該当商品名、コード、区分、商品数等を取得 (3) 区分:1の場合は、該当日付の下の6行に、区分:2の場合は、8行に設定(同一商品の場合は加算) 但し、新しい商品の場合は行を追加→ 区分:1の場合は6行以降に、区分:2)の場合は8行以降に追加する (4)区分ごとの小計を表示 (5)合計を表示 (6)bookのみ処理した日付と時間で保存 (7)入力データのブックを閉じる。 出来ているところは日付を貼り付けるまでは教えてもらいながらですができています。 明日中とのことなのでよろしくお願いします。

  • バーコード作成ソフト

    バーコードの作成・管理・ラベル作成をできるソフトを探しています。フリーのものもあるようですが、JANコード?をしっていないと結局意味ないんですよね・・・コードの一覧とか、商品名を入れるだけで出来るようなものはないでしょうか?詳しい方お願いいたします。

  • VBAのボタンで数式を入れる方法

    VBA初心者です。 未特定の行のデータシートの行数を調べて、その行数分特定の列に関数を入れるようなVBAを作成中です。 現在、下記のようなコーディングをしているのですが、セルに入れるものが関数になった時点で分からなくなりました。 Private Sub CommandButton1_Click() Dim rs As Integer rs = Range("D2").End(xlDown).Row Dim Ka As Integer Ka = ' →ここに数式を入れる方法が分かりません! Range(Cells(2, 5), Cells(rw, 5)) = Ka Worksheets("Sheet2").Activate MsgBox ("成功" & rs) End Sub こんな感じなんですが、宜しくお願いします。

  • 入荷時、バーコードの付いていない商品にバーコードをつける方法

    こんちには。ご指導お願いします。 入出荷システム改善を検討しています。衣服系の入出荷なのですが一部入荷時に自社のみで利用するバーコードを貼り付けて入庫したいのですが、どのような方法が効率よいでしょうか? 現在は入荷データを利用して定置式プリンタから商品名入りバーコードを印字し、全ての入荷した製品にバーコードを商品に貼り付けた後、最後にあらかじめ入荷リスト発行し、それを見ながら個数を数えて、欠品や商品間違いを確認しています。 バーコードリーダーを利用したり、モバイルプリンタを利用したりして効率よく同じ作業を出来ますでしょうか?(入荷リストの削減や、同時に入庫検品まで行えるとベストです。) 入荷する商品には”バーコードがついてるもの"、”バーコードが付いていないもの”、”バーコードが読み取れないもの”があります。製品のバーコードと自社のバーコードの対比テーブルをデータベースで作ることは可能です。 ご意見承りたくお願いします。

  • エクセルVBA

      A  B  1 12  12 2 25  3 28 4 89 A列の数字を、1行目から順番にB1に表示していきたいのですが、 どのような構文になるでしょうか。 12 25 28 89 といった具合です。 A列の数字や行数はそのつど変化します。 ご教授宜しくお願い致します。

  • getElementByIdを使うとforループが機能不全になる。

    Javascript初心者です。至らないところも多々あるかと存じますがよろしくお願いします。ブラウザはIE7を使用しています。 当初以下のようなコードを動作させようとしたところ、 for(h = 1;h < 3;h++){ ※1 var mzu= "menu" + h; var kami = document.getElementById(mzu).childNodes; for(var x =0;x<5;x++){ var jiu = "suichi" + h; var sai = document.getElementById(jiu).offsetHeight; ※2 ☆kami[x].style.top = (sai*(x+1));☆ } } ※☆は後の説明用に付加しているだけで実際のコードにはありません IDが"menu1"の要素については期待したような結果が得られたのですが、IDが"menu2"の要素について期待したような結果が得られなかったため、alert()を用いて原因を探ることにしました。具体的には※1の部分にalert(h);を、※2の部分にalert(kami[x].style.position);を入れてみて、動作確認をしてみました。 私が期待しているようなメッセージの出る順番というのは 「1」が表示される→4回"kami[x].style.position"の中身が表示される(ちなみにabsolute)(★)→「2」が表示される→再び4回"kami[x].style.position"の中身が表示される というものですが、実際には★の部分までしか期待されたメッセージが表示されなかったため、forループ(一つ目の)が一回のみで終了してしまったのだと判断しました。 そこでひとつひとつの行を削除したり再び加えたりしながらforループ を一回目で止めてしまっている原因を探ってみたところ、 ※2(kami[x].style.position);の行と☆~☆の行を削除した場合は メッセージが1→2と表示される、すなわちひとつめのforループがしっかりと機能していることから、おそらく原因は※2の行や☆~☆の行で DOM要素にアクセスしていることだと思うのですが、どうも原因がわかりません。 もちろん元のコードでもエラーは出ていません。 詳しい方、どうぞお力添えいただけないでしょうか。

  • ISBNコード JANコードの作成、印刷に関する質問です。

    ISBNコード JANコードの作成、印刷に関する質問です。 . 自身で作成した小冊子がネットオークションでの完売することがきたので、今度は「「Amazon e託販売サービス」」にて販売したいと考えております。 「Amazon e託販売サービス」にて小冊子を販売するには、図書コード(ISBNコード)とJANコードを印刷する必要があります。 図書コード、JANコードは分かりましたし、此方で取得しようとおもっています。 これらのコードをバーコードにするにあたり分からないことがあるので投稿させていただきました。 バーコードはソフトがあればだれでも作ることできるが、バーコードのリーダーでは読めても、出版流通で指定されているものよりも少しでも違っていると、取次の見本段階でアウトになる可能性があること。 ISBNコード・バーコードの表示は、出版の規格の範囲である必要があること。 これらを事前に確認せずにそのまま見本を出したら、ほぼ、刷り直しでアウトになり、Amazonでは販売できないということだそうです。そのためには、バーコードの作成、印刷は専門の業者に依頼するのが最善だと思いました。 仕様が”小冊子”状にしたいと思っております。本格的な書籍にしないので、製本は印刷屋さんでやっていただける中綴じ冊子にしたいと思っています。 そのためには、印刷屋さんに作成したデータを入稿する必要があります。このデータには先述した「ISBNコード、JAMコード」を入れなければいけないことになります。 しかし、 バーコードの作成を請け負っていただける業者は結構あるのですが、作成、印刷を請け負っていただける業者さんが非常に少ないです。 ほとんどの印刷屋さんでは、 バーコードがつけられた原稿データをこちらで作成すれば印刷は可能だが、そうしたバーコードが読み取り可能かの検証は行なっていないとのことです。 無料ソフトでバーコードを作るならまだしも、バーコードだけを業者に作成していただき、そのバーコードデータを原稿データに貼り付け印刷屋に入稿すて見ようかとも思っているのですが、ISBNコード・JANコードのバーコードの表示の出版の規格の範囲とは、この様なやり方でもエラーが出てしまうほど、厳格なものなのでしょうか? シールで貼られたバーコードなどもあるので、大丈夫なのでは?と少し安易に考えているところもあるのですが、 お詳しい方が居れば教えていただけないでしょうか? 宜しくお願いいたします。