- 締切済み
続きをお願いいたします。
(TT)済みません。 完璧だと思っておりましたが、実践でやってみて気づいたのが sheet1のA45~48に何も入力されていない時には sheet2のH~Lには何も入力したくなかったのですが、 sheet1のA45~48に何も入力されていない時に B4に入力されている文字がsheet2のHとIに来てしまっていました。 先週からやってみて、このパターンが今日初めてだったので ずっと気がつきませんでした。 ちなみにA45に入力されている時はちゃんと A45に入力されている文字がsheet2のHとIに来ています。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- tom04
- ベストアンサー率49% (2537/5117)
No.3・4です。 >に関して、前回のNo.19のコードで大丈夫だと思うのですが・・・ >あのコードに手を加えられたのでしょうか? の件ですが、全く気にしていませんよ。 むしろご自身で改良して使いやすくしてもらった方が、回答した者としては喜ばしく思います。 実際の表の状態はこちらでは判らないので、ほとんど憶測でコードを載せています。 当方が示したコードがベストではありませんので、 一番良いのはそれをアレンジして不要な部分を削ったりし、 最終的には自力でコードをいくらでも変更できるようになることだと思っています。 ※ 個人的には関数(数式)にしても、VBAのコードにしても 長いのはあまり好きではありません。(と言いながら、結構長いコードも投稿することがありますが・・・) 後から手直しをする際に数式や、コードを見るだけで嫌になることもあります。m(_ _)m
- tom04
- ベストアンサー率49% (2537/5117)
No.3です。 たびたびごめんなさい。 No.3の >前提条件 → A45セルにデータがない場合はA48セルまですべてデータがない!とします。 >すなわちA45~A48セルはデータがあるか、ないかのどちらかという前提です。 は無視してください。 もう一度コードを見直してみると、上の方にA46~A48セルの処理はちゃんとしていましたね。 どうも失礼しました。 すっかり以前のコトは忘れていました。 ※ 昨日の夜も何を食ったか覚えていないので、(まぁ~!食ったのは覚えているので少しはええかな?) 数日前のコトは頭から消え去っています。 結局A45セルにデータがあるか?ないか?だけの処理だけです。m(_ _)m
補足
お待ちしておりました! 来てくださってありがとうございます!!!! 本当に何度も済みません。。。 ご親切にありがとうございます。 >に関して、前回のNo.19のコードで大丈夫だと思うのですが・・・ あのコードに手を加えられたのでしょうか? えーと何も手を加えない状態でしたが、A45が未入力の場合 HIの列にB4の名前が出て来てしまいました。。。 あ!これはあくまでもクレームではなく報告ですので! ご理解いただけたらと思います。m(_ _)m 感じ悪かったら済みません。m(_ _)m この後今回作っていただいたデータで大丈夫でした! 後程作業をさせていただきましたら再度ご報告させていただきます! ありがとうございました! >まぁ~!食ったのは覚えているので少しはええかな? 当方も同じです!!(笑)
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! http://okwave.jp/qa/q8491060.html の件ですね! ずぅ~~~っと回答履歴をさかのぼってみました。 今回回答されていらっしゃる、No.2さんと当方だけしか判らない質問だと思います。 さて本題ですが、 >sheet1のA45~48に何も入力されていない時には >sheet2のH~Lには何も入力したくなかったのですが に関して、前回のNo.19のコードで大丈夫だと思うのですが・・・ あのコードに手を加えられたのでしょうか? それでは念のために前回のコードに IF~Then を付けくわえて もし、「A45セルにデータがある場合は」H~L列にデータを転記!としてみました。 あくまで念のためです。 前提条件 → A45セルにデータがない場合はA48セルまですべてデータがない!とします。 すなわちA45~A48セルはデータがあるか、ないかのどちらかという前提です。 ↓のコードの★印が追加したコードです。 Private Sub CommandButton1_Click() Dim k As Long, cnt As Long, startStr As Long, lastStr As Long, str As String Dim myShp As Shape On Error Resume Next '←念のため str = Left(Range("B4"), InStr(StrConv(Range("B4"), vbNarrow), "[") - 1) If InStr(Range("B2"), "【") > 0 Then k = InStr(Range("B2"), "【") - 1 Else k = Len(Range("B2")) End If startStr = InStr(Range("B4"), "[") + 1 lastStr = InStr(Range("B4"), "]") With Worksheets("Sheet2") cnt = .Cells(Rows.Count, "A").End(xlUp).Row + 1 .Cells(cnt, "A") = Trim(Replace(Left(Range("B2"), k), vbLf, "")) .Cells(cnt, "B").Resize(, 2) = Trim(Replace(str, " ", " ")) .Cells(cnt, "D") = Trim(Replace(Mid(Range("B4"), startStr, lastStr - startStr), " ", " ")) .Cells(cnt, "E") = Trim(StrConv(Range("B8"), vbNarrow)) .Cells(cnt, "F") = StrConv(Left(Trim(Replace(Range("B7"), "〒", "")), 8), vbNarrow) .Cells(cnt, "G") = Trim(Replace(Replace(Range("B7"), "〒", ""), .Cells(cnt, "F"), "")) .Cells(cnt, "J") = Trim(Replace(UCase(StrConv(Range("A48"), vbNarrow)), "TEL:", "")) .Cells(cnt, "K") = Trim(Replace(Range("A46"), "〒", "")) .Cells(cnt, "L") = StrConv(Range("A47"), vbNarrow) '※ ココから追加 If Range("A45") <> "" Then '←A45セルにデータがあれば・・・★ str = Left(Range("A45"), InStr(StrConv(Range("A45"), vbNarrow), "[") - 1) startStr = InStr(Range("A45"), "[") + 1 lastStr = InStr(Range("A45"), "]") .Cells(cnt, "H") = Trim(Replace(str, " ", " ")) .Cells(cnt, "I") = Trim(Replace(Mid(Range("A45"), startStr, lastStr - startStr), " ", " ")) '※ ココまで End If '★ '↓オブジェクトの削除(コマンドボタン以外) For Each myShp In Worksheets("Sheet1").Shapes If myShp.Type <> msoOLEControlObject Then If myShp.OLEFormat.progID <> "Format.CommandButton1" Then myShp.Delete End If End If Next myShp End With '↑まで Range("A:K").ClearContents End Sub ※ 万一A45セルのみデータがなく、A46セル以降にデータがありそのデータを転記したい場合は IF~を重ねても良いですが、 45行目~48行目までをループした方が簡単かもしれません。 まずはこの程度で・・・m(_ _)m
- kagakusuki
- ベストアンサー率51% (2610/5101)
そうなる恐れがあるからこそ、 >前もって、必要となる情報を全て取りこぼしの無く説明しておく様にして下さい。 >A45~A48はたった1件分の送付先データにしか過ぎません。 >他の送付先データは、一体どこに入力されているのでしょうか? >送付先のデータが入力されている箇所が、その都度変わって来るという事になりますが、それでは一体、何処に入力される事になるのでしょうか? > そもそも、貼り付け先がその都度変更されるという条件があるのにもかかわらず、何故、送付先のデータを貼り付ける場所の例として、A45~A48を挙げておられるのでしょうか? > どの様な決まり事で、送付先のデータを貼り付ける場所がA45~A48になったのか、という事を御説明願います。 > つまり、例えば「A列において複数ある『"受注番号"と入力されているセル』の直ぐ上の4つのセルがA45~A48であるから」という様な類の、どの様な決まり事になっているのか、という事を御教え願います。 と申し上げた筈です。 それにもかかわらず、必要な情報に関して何も説明する事無く質問を締め切られた上で、今回もまた、 >わかる方にのみわかる。という形にさせていただいておりました。 などと我儘な事を言われても、元々、必要な情報がそろっていないのですから、当然、「わかる方」等というものは存在しませんので、今のままではこの御質問は解決方法が存在しない質問という事になってしまっています。 ですから、 >わかる方にのみわかる。という形にさせていただいておりました。 などと我儘な事を言うのは止めて、必要となる情報を全て取りこぼしの無く説明しておく様にして下さい。 又、前回の御質問では、回答が投降された後になってから、「質問文ではこう書きましたが、実際のやり方をこの様に変更した処、回答者さんの方法では上手く行きませんでした」などという、条件を次々と変更して行った上で、後から方法を変更したにもかかわらず、回答された方法が間違っていたかのようにクレームを付けて来る事が何度か御座いましたが、それは回答者の落ち度などでは無く、後になってから条件を変えた質問者様御自身が悪いのですから、今後はその様な事は止めて下さい。
お礼
なんかずっと気にかけてくれて済みませんねー...。> < 申し訳ないです。 >必要な情報がそろっていないのですから、 当然、「わかる方」等というものは存在しませんので 大丈夫です!ご心配なく! 本当にありがとうございます。
- satoron666
- ベストアンサー率28% (171/600)
続きをお願いします、は良いのですが どういった内容なのか把握できません。 投稿者さんの質問は非公開になっています。 また、タイトルから内容が察しにくいため、 今後は対応お願いします。 まー、内容は良く分かりませんが、 最初にIF文章を追加すれば良いのでは? =IF(A45="","",教えて頂いた関数?) これで良いかと思います。
お礼
気にかけてくださってありがとうございます。 前回、投稿し既に締め切った質問の続きでして 新たに回答が来ると私の頭の中で整理出来ず ややこしくなり、どうにも出来なくなってしまいますので わかる方にのみわかる。という形にさせていただいておりました。 ありがとうございました。
補足
>全く気にしていませんよ。 良かったです!ありがとうございます! >最終的には自力でコードをいくらでも変更できるようになることだと思っています。 過去に他の方のコードを自力で変更してみた事がありますが、 必ずと言っていいほどエラーが起きてしまいます。 (^^;)まだまだですね。 ですのでtom04様には御世話になりっぱなしで、、、 バカな私にも理解が出来るわかり易いご説明も本当に助かります!