2015年10月13日

蟻地獄2

DSC_0070.JPG
最近蟻地獄はまってます。これも360枚。ただし、1枚が前回の4倍の面積なので、大きいです。
posted by ちょびちょび at 21:56| Comment(21) | TrackBack(0) | 日記
この記事へのコメント
シートをテーブルとして扱い、複雑なSQLを使用しても大丈夫でしたら、実現できそうですが、ワンステップでソートは難しそうです。まずは、A列の前に1列追加して、ソート用列を編集しましょう。
C「予定日」が早い順に並び替え、ですよね。追加した先頭列に「予定日」を全部コピーします。
次にDの条件に該当する行の先頭列を一番早い予定日の1日前にします。
Aでタイプの設定があれば、条件に該当する行の先頭列をDと同じ日にします。
先頭列でソートして、トレーの数を2行目から加算し、30(または80)を超えない間は列の背景色を変更します。

おおまかな流れとしては、ソート列編集⇒並べ替え⇒トレーの数調整です。

さて、トレーの数ですが、同一予定日で降順に並べてしまっても大丈夫ですか? それともなるべく元の順番を尊重する方がいいでしょうか。また、トレーの数は30ちょうどが望ましいですか? 30に満たなくても、OKですか?
例えば次の行を足してしまうと30を超えてしまう。同一予定日でちょうど良い行が下の方にあれば入れ替えをしますが、予定日が違うデータにトレーの数がちょうど良い行がある場合、予定日を無視しても行を入れ替えた方がいいですか?

また、Dの実施日が現時点より10日以上経過しそうで8〜9日とありますが、Dのソート列を編集するときは、現在日+8日と9日を計算して、それと同様の実施日のデータが先頭に来るよう編集をする、で大丈夫ですか?
タイプについても設定したタイプを優先というからには複数のタイプがあるように思われますが、@で同一種類のみと記述があるのは処理にどう反映すべきなのかよく理解できていません。

明日、いや、もう今日かな。緊急の用事が発生しなければ、サンプルを用意しましょう。それまでに上記について補足を頂ければなるべく反映します。
Posted by ちょびちょび at 2018年09月30日 02:29
nephronさん。こんばんは。下記にサンプルアップしましたので、ダウンロードして下さい。
http://www.bec-co.sakura.ne.jp/dataland/Repository.php

おや。takoyakiudonさんと同じ会社の方でしたか。

Posted by ちょびちょび at 2018年09月30日 20:36
突然の質問でサンプルまで作成していただき感謝の気持ちで一杯です。
この件の補足についてですが
同一で並び替えて欲しいです。トレーの数は30ジャストでお願いします。30に満たない場合は同一予定日でちょうど良い行が下の方にあれば入れ替えをお願いします。出来れば30になるグループを同じ色で塗ってほしいです。

Dの実施日が現時点より10日以上経過しそうで8〜9日とありますが、Dのソート列を編集するときは、現在日+8日と9日を計算して、それと同様の実施日のデータが先頭に来るよう編集をする、で大丈夫ですか?ですが
→それで大丈夫ですお願いします

タイプについては説明不足で申し訳ありません。
複数タイプあるのですが同一タイプでしか設備に入れられないので同じタイプのみ処理する、って事なんです。

よく同じ会社だとお解りになられましたね!私はtakoyakiudonの家族です。半年前に妻と同じ会社に転職しました。妻がお気に入りに登録しておりましたので思いっ切って質問しちゃいました。
ちなみに複雑なSQL文でも構いません。私は半年前から始めたのでまだ右も左も解っていないのでこれか少しずつやってみようと思って居ます。
Posted by nephron at 2018年09月30日 22:25
詳細は伺っておりませんが過去のスレを拝見した感じ以前から妻がかなりご迷惑をお掛けしたみたいで申し訳ございませんでした。妻はもう職場も部署が変わったみたいでPCに触ってない様です。この場を借りましてお礼を申し上げます。
Posted by nephron at 2018年10月01日 08:17
いえいえ。数独の問題でも解く感覚でやってることですので、嫌だったらやらなければいいだけですので、お気になさらず。相談者様もその辺を理解して下さってる分には利用して貰って結構ですが、期待通りで無いと苦情を言われると、私も大人気ない対応をしてしまいます。
さて、当初想像していたより少し複雑でしたので、平日の対応は難しいです。週末でよろしければかなりご希望に近いものが出来ると思います。それでよろしければ、確認したい仕様があります。8日前、9日前でソート結果が先頭になったデータは、色分けするときは、元々の予定日ごとにグループ化するのでしょうか。大体で結構ですので、データのボリューム感も教えて下さい。
Posted by ちょびちょび at 2018年10月02日 08:17
ありがとうございます。元々の予定日でグループ化でお願いします。データの件数ですが100〜200くらいのデータです。お忙しい中質問にお答え頂き感謝いたします。私ごとですが第3子を授かり1月に出産予定です。母子共に健康ですがおそらく情緒不安定になってた時期と被ってたのかな?と、、信じたいです、、ありがとうございました。
Posted by nephron at 2018年10月02日 12:23
差し替えましたので、ご確認ください。
http://www.bec-co.sakura.ne.jp/dataland/Repository.php

来年、家族が増えるのですか。おめでとうございます。ウチは義母の介護、次々天国へ旅立ってしまう親族(大体が平均寿命を上回る大往生ですが)と明るい話題が少ないです。私が現在IT関係の支援でお邪魔している企業様は当然のように女性は出産後復帰します。ホームカミングデーのような行事があり、休職中の女性が赤ちゃんを連れて来るのを見るのが楽しみです。
Posted by ちょびちょび at 2018年10月08日 01:47
おはようございます。まさに期待通りの思い描いた処理が実行出来ました。感謝の気持ちで一杯です。お忙しい中突然の質問にお答え頂き大変ありがとうございます。
以前まで妻が会社でバリバリ働いて私が育児メインの生活でしたが妊娠を期に役割を変更し私が転職して交代勤務に妻が昼間の業務に変更しました。ホームカミングデーのような行事があるのですね。赤ちゃんは可愛いですよね。きっと素敵な風土の会社なのでしょう。
Posted by nephron at 2018年10月08日 05:40
おはようございます。もし可能であればのお話しなのですが先日作成していただいたサンプルで作業者からMAXぶんきっちりトレーを入れたいと要望がありまして「もし30枚以下」ならトレーの不足分のデータを「予定日・実施日を無視して」30又は80丁度になるように並び替えた集団に並び替えて組み込む事が可能でしょうか?例えば10/12で並び変えたグループのトレーの枚数が27とかだったとして不足3のデータを探して同じ集団にする・・みたいな感じです。。身勝手な要望ですがもし可能でしたらお力を貸して頂けませんでしょうか。。
Posted by nephron at 2018年10月12日 06:45
すみません。週末は親戚の不幸でバタバタしておりました。
現在は'同一予定日、タイプの合計が30枚以下なら背景色を変更して処理終了 のところを30丁度と未満に処理を分岐して未満の場合は同一タイプだけを末行まで検索に変更と修正してみて下さい。
Posted by ちょびちょび at 2018年10月15日 06:34
大変な時にアドバイス頂き感謝です。ちょっと私にはレベルが高そうですがやってみます!
Posted by nephron at 2018年10月16日 06:41
こんばんは。アドバイスを参考にしトライしたのですが30以下か丁度という処理をするのは計算式をセットの部分の以下のような感じでしょうか??

If Sheets(cS1).Range("N1") > 0 Then
Do While Sheets(cS1).Range("N1") >= lngMaisu
Ret = GroupSort(StaRow, i - 1)
StaRow = StaRow + Ret
Loop
If Sheets(cS1).Range("N1") > 0 Then
Do While Sheets(cS1).Range("N1") = lngMaisu
Ret = GroupSort(StaRow, i - 1)
StaRow = StaRow + Ret
Sheets(cS1).Range("A1:K" & MaxRow).Sort Key1:=Sheets(cS1).Range("F1"), _
Posted by nephron at 2018年10月17日 02:30
中々まとまった時間が取れなくて的確な回答が出来ず申し訳ありません。私も自分が言ったことをコーディングしてテストしてみましたが、それほど単純なことではありませんでした。予定日の枠を超えて検索してしまうと、GroupSortから戻ったとき、違う予定日の分をiに加算してあげないといけないのですが、Functionで2種類の数値を返却ではあまり美しくないな……などと思い悩んでいます。タイプごとにシートを分けで処理して、またグループごとに予定日でソートした方がいいかもしれません。
Posted by ちょびちょび at 2018年10月22日 00:30
お忙しいところ回答ありがとうございます。なかなか難しい処理になるのですね。。これはもう素人の手に負えないレベルですね。。ちょっと職場の皆さんと作業について相談してみます。
Posted by nephron at 2018年10月25日 19:25
こんばんは。お忙しい中サンプルを作成して頂いてありがとうございました。前回作成して頂いたマクロで何とか作業出来るようになりました。足りない部分は人の力が必要ですが目的はとりあえず達成出来そうです。感謝の言葉しかありません。もう一つついでに質問で恐縮なのですが別シートにアクセスして内容を取り込むマクロがあるのですが参照先のシートが毎月更新されるそうです。単純にシートが増える。10月のシート、11月のシートというようにエクセルのシートが増えるのですが最新のシートを読み取りで開いてこちらのエクセルシートに最新の情報を取り込みたいのですが最新のシートを取り込むには以下のマクロをどのように変更したら良いのでしょうか?
Const STANDARD_DB_FILENAME = "1111.xlsm"
Const STANDARD_DB_STARAT_ROW = 1
Dim xlsWorkbook As Workbook
Dim xlsWorksheet As Worksheet
Dim lngLastRow As Long
Dim actBk, wb As Workbook
If ThisWorkbook.ReadOnly Then
Exit Sub
'ファイルオープン
Set xlsWorkbook = Workbooks.Open(Filename:=STANDARD_DB_FILENAME, ReadOnly:=True)
Set xlsWorksheet = xlsWorkbook.xlsWorkSheets("")
'エクセルに格納
ThisWorkbook.Sheets("").Cells.Delete
With xlsWorksheet
lngLastRow = .Cells(Row.Count, "A").End(xlUp).Row
.Range(.Cells(STANDARD_DB_STARA_ROW, "A"), .Cells(lngLastRow, "AQ")).Copy ThisWorkbook.Sheets("").Range("A1")
End With
Workbooks("11111").Close savechanges:=False
End If
End Sub
お忙しい所恐縮ですがお願い致します。
Posted by nephron at 2018年11月07日 02:53
すみません。書き込みに気付いたのが昨日で、もう解決済だとは思いますが……。Macro1が元にコードに沿って添削したものになります。Macro2が単純に他ブックからシートをコピーしてくる処理です。セルのコピーでないと処理に支障があるなら仕方ないですが、特に問題なければシートごと取り込んだ方がラクだと思います。
ThisWorkbookでも大丈夫ですし、好みの問題になりますが、処理が複雑になるとオブジェクト名は短い方がいいと思うので、私は他のExcelを開いて処理するようなときは明示的にコピー元、コピー先みたいな感じで定義してます。
Dim bkMoto as Workbook
Dim bkSaki as Workbook
Dim stMoto as Worksheet
Dim stSaki as Worksheet とか。
Macro2のSet mySheet = ActiveWorkbook.Worksheets(1)
という行の話です。(1)は先頭シートのことで、("Sheet1")と書いてもよいし、先頭でなく末尾だったら(ActiveWorkbook.Sheets.Count)。

Sub Macro1()
Const STANDARD_DB_FILENAME = "1111.xlsm"
Const STANDARD_DB_STARAT_ROW = 1
Dim xlsWorkbook As Workbook
Dim xlsWorksheet As Worksheet
Dim mySheet As Worksheet
Dim lngLastRow As Long
Dim actBk, wb As Workbook
If ThisWorkbook.ReadOnly Then
Exit Sub
'ファイルオープン
Set mySheet = ActiveWorkbook.Worksheets(1)
Set xlsWorkbook = Workbooks.Open(Filename:=STANDARD_DB_FILENAME, ReadOnly:=True)
Set xlsWorksheet = xlsWorkbook.Worksheets(1)
'Excelに格納
mySheet.Cells.Delete
With xlsWorksheet
lngLastRow = .Cells(xlsWorksheet.Rows.Count, "A").End(xlUp).Row
.Range(.Cells(STANDARD_DB_STARAT_ROW, "A"), .Cells(lngLastRow, "AQ")).Copy mySheet.Range("A1")
End With
xlsWorkbook.Close SaveChanges:=False
Set xlsWorkbook = Nothing
End If
End Sub

Sub Macro2()
Const STANDARD_DB_FILENAME = "C:\test\1111.xlsx"
Dim xlsWorkbook As Workbook
Dim mySheet As Worksheet
Set mySheet = ActiveWorkbook.Worksheets(1)
Set xlsWorkbook = Workbooks.Open(Filename:=STANDARD_DB_FILENAME, ReadOnly:=True)
xlsWorkbook.Worksheets(xlsWorkbook.Sheets.Count).Copy After:=mySheet
xlsWorkbook.Close SaveChanges:=False
Set xlsWorkbook = Nothing
End Sub
Posted by ちょびちょび at 2018年11月11日 20:03
なるほど・・このような書き方もあるのですね。お忙しい中回答頂き感謝致します。マクロ2のほうがシンプルで使いやすそうですね!マクロ2についてですが「取り込み先」っていうシートに毎回コピー元ののデータを取り込みたいのですが取り込みたいシート名を指定するにはどのようにしたら良いでしょうか?Set mySheet = ThisWorkbook.Worksheets("取り込み先")とか思い付く範囲でいじってみたのですが参照元のシートは増えないようにしたいと思いまして。。
Posted by nephron at 2018年11月13日 07:41
無事解決しました。ありがとうございました。
Posted by nephron at 2018年11月21日 13:29
急に寒くなって参りましたのでご自愛くださいね。私んとこは来月18に出産予定です。
Posted by nephron at 2018年12月13日 17:44
お久しぶりです。無事出産し毎日あわただしく過ごしております。出産時にはふさふさだった髪の毛がすっかり抜け落ちてしまいボウズになってしまい可哀想なんですがまた生えて来ると信じてます笑
Posted by nephron at 2019年06月10日 13:59
こんにちは。ご無沙汰しております。
セルのC6からC500まで文字が入力してあります。エクセルのセルの特定の範囲がD6からAH500行までの間で×があればそのシートのC列の文字を×があるセル上ににコメントの挿人(C列の文字を何が×だったのか解るように)をVBAで自動で出来るものでしょうか?
Posted by nephron at 2020年12月12日 14:02
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/165654052

この記事へのトラックバック