[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 08/01 06:58 / Filesize : 189 KB / Number-of Response : 699
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Excel VBA 質問スレ Part15



1 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 01:07:19 ]
過去スレ
01 pc11.2ch.net/test/read.cgi/tech/1054356121/
02 pc11.2ch.net/test/read.cgi/tech/1168308855/
03 pc11.2ch.net/test/read.cgi/tech/1180192018/
04 pc11.2ch.net/test/read.cgi/tech/1189814602/
05 pc11.2ch.net/test/read.cgi/tech/1197448064/
06 pc11.2ch.net/test/read.cgi/tech/1205231499/
07 pc11.2ch.net/test/read.cgi/tech/1212587819/
08 pc11.2ch.net/test/read.cgi/tech/1219673793/
09 pc11.2ch.net/test/read.cgi/tech/1228372971/
10 pc12.2ch.net/test/read.cgi/tech/1235332603/
11 pc12.2ch.net/test/read.cgi/tech/1241885130/
12 pc12.2ch.net/test/read.cgi/tech/1247566074/
13 pc12.2ch.net/test/read.cgi/tech/1254281104/
14 pc12.2ch.net/test/read.cgi/tech/1262748898/ ←New!

関連スレ
Excel総合相談所 91
pc11.2ch.net/test/read.cgi/bsoft/1270542226/
Word総合相談所
pc11.2ch.net/test/read.cgi/bsoft/1263719084/
【質問不可】Excel総合相談所スレの雑談・議論スレ2
pc11.2ch.net/test/read.cgi/bsoft/1151651536/

2 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 01:11:01 ]
>>1乙です

3 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 07:05:02 ]
rivate Sub CommandButton1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If 2 < X < 14 And 2 < Y < 14 Then
Label1.Visible = True
Else
Label1.Visible = False
End If
End Sub
ワークシート上に配置したコマンドボタン(縦、横共に大きさ15)
上にマウスがある場合はラベル1を表示。
ボタンの端にある場合は非表示にしたいのですがうまくいきません。
(わけあってユーザーフォームは使わずに作りたいのですが。。。←ユーザーフォーム上はmousemoveイベントがある)
透明なラベルを後ろに配置し、そこにマウスが乗った時に
ラベル1を非表示にすることはできましたが、
透明なラベルをクリックすると見栄えが悪いので上記の方法を取り組んでいます。
よろしくお願いいたします。

4 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 08:38:37 ]
このIF文実行できんの?

5 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 08:57:49 ]
で、どう動かないの?
イベントはあるんだっけ?
まぁあったとして、それじゃあマウスの移動速度依存だよ
.netなら入ってきた、出ていったイベント使えるけど。

だから他のコントロールと連携してマウスの動きを監視するとかしないと期待する結果とはならないです。

オレだったらそのイベント1秒後にAPIでマウス座標取るようにするかな、OnTimeで。

6 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 12:35:35 ]
>>3
× If 2 < X < 14 And 2 < Y < 14 Then
○ If 2 < X And X < 14 And 2 < Y And Y < 14 Then

>>4
できる。「2 < X < 14」は「(2 < X) < 14」だから、VBAの場合は常に真になる。

7 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 12:48:45 ]
わずか数ドットの範囲をチェックする方法だと、マウスを速く動かすとイベントがうまく発生しないよ

8 名前:デフォルトの名無しさん [2010/04/15(木) 12:50:20 ]
commandbottunを複数用意し、clickイベントでそれぞれのcaptionを
A列の一番下の行の下に表示させたいと思っています
(日記で天気を入力するような感じです
晴れ曇り雨ボタンを作成して、それぞれを記入する感じです。
またこの先も追加される可能性があります)
こういった複数のボタンの動作をまとめることは可能ですか?
それとクリックイベントとダブルクリックイベントもまとめたいのですが、可能でしょうか
連続で押すとダブルクリックとみなされてしまいイベントが発生せず困っています

'この三行をCommandButton2.3以降もまとめたい
Private Sub CommandButton1_Click()
Call tenki(CommandButton1.Caption)
End Sub
'ダブルクリックも同様にまとめたい
Private Sub CommandButton1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Call tenki(CommandButton1.Caption)
End Sub
'書き込みルーチンです。
Sub tenki(tenkihensu As String)
Dim gyo As Long
gyo = Range("A500").End(xlUp).Row + 1
Cells(gyo, 1) = tenkihensu
End Sub


9 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 13:45:50 ]
>>8
VBAでは無理。ずらっと並べて書くしかない。VBだとまとめられるんだけどねえ。

10 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 23:13:58 ]
>>8
クラスモジュールを使ったらどう?

>クリックイベントとダブルクリックイベントもまとめたい
未対応です(クリックイベントのみです)

1)クラスモジュールを挿入(モジュール名 Class1)
 Private WithEvents myButton As MSForms.CommandButton
 Public Property Let SetButton(Button As MSForms.CommandButton)
   Set myButton = Button
 End Property
 Private Sub myButton_Click()
   Call tenki(myButton.Caption)
 End Sub

2)ThisWorkbookへ記述(CommandButton1〜CommandButton10まである場合)
 Private myButtonArray(1 To 10) As New Class1
 Private Sub Workbook_Open()
  Dim i As Integer
  Dim Sh As Worksheet
  Set Sh = Sheets("Sheet1")
  For i = 1 To 10
    myButtonArray(i).SetButton = Sh.Shapes("CommandButton" & i).DrawingObject.Object
  Next
 End Sub

※2)のコードは標準モジュールでもいいんだけど
 このコードが実行された時点でクラスモジュールのコードが
 CommandButtonと結びつき 有効(実体化)となります。

参考にしたサイト
ttp://oshiete.homes.jp/qa4601661.html



11 名前:デフォルトの名無しさん [2010/04/16(金) 01:40:41 ]
最近Excel2000 VBAを勉強し始めました。
これまではCをやってきたので、その違いに戸惑っています。そこで教えてください。
1
見やすいソースになるように、TABを使って自分なりの整形するのですが、
次の行に移ると、勝手にレイアウトが変えられてしまいます。
普通のエディタのようにレイアウトを保持することは出来ないでしょうか?

2
TABが、半角スペース4つになってしまいます。TABを保持させるには、
どの設定を触れば良いでしょうか?

3
変数宣言をしないとコンパイルエラーを起こすように出来ないでしょうか?
1文字タイプミスしても変数として動作するため、ちょっと心配なんです。

4
予約語の先頭が大文字になってしまうのですが、これを止めることは出来ないでしょうか?

5
複数行をコメントアウトするのに、行選択してボタンを押すようですが、
/*
*/
のような記述はできないでしょうか?

6
セルを指し示すとき、Cells( y, x )で指示するようですが、
Cells( x, y )のようにすることは出来ないでしょうか?

以上です。宜しくお願いします。

12 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 02:04:17 ]
>>11
(1) できない
(2) 変えられない
(3) モジュールの先頭にOption Explicitと書く
(4) できない
(5) できない
(6) できない

座標がy, xになるのはExcelに限らず表計算ソフトのルールだから慣れるしかない。
それにy, xじゃなくてr, cと覚えた方がいい。
ソース関連は別のエディタで書いてコピペするぐらいしか根本的な解決方法がない。

VBAはあくまでもVBのサブセットだから制約がかなり多い。VBAである必要性がないのならVBを使った方がいい。

13 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 02:10:40 ]
前スレで出てたけど、予約後の先頭を大文字にしない方法は一応ある。
たとえばIfをifにしたい時はdim if [Enter]と入力してからこの行を消去する。
そうするとエディタが一時的に「if」というキーワードを記憶してくれる。
とても実用的な方法ではないけどね。

14 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 09:20:24 ]
(5)編集コマンドバーに、複数行をコメントにする機能ならあるけど

15 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 10:08:39 ]
>>12-14
みなさん、ありがとうございます。よくわかりました。
慣れるしかないって感じですね。

エディタのツール→オプション→編集のところに「変数の宣言を強制する」というチェックボックスがありました。
これは、>>12のご回答「(3) モジュールの先頭にOption Explicitと書く 」と
同じ効果がありそうな、感じがします。

>VBAである必要性がないのならVBを使った方がいい。
  VBにすると、私の質問の多くが解決されそうでしょうか?
  特にTABの保持が実現できるなら、VB買おうかなと思います。
  アプリを1から作るためのVBではなく、
  トレース実行など、現在のVBAのようにExcelとの連携が密にできて、
  Excel付属のVBAの使いにくさが解決できるなら、ぜひ買いたいです。


16 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 10:38:47 ]
(5)について

ご希望のとは違うし、これが2000でも使えるかどうかは知らんけど

VBEのコードを簡単にコメントブロックする方法
officetanaka.net/excel/vba/tips/tips04.htm



17 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 11:48:08 ]
>>16
うぉーーー、これは便利です。
さっそく取り入れました。キーボードから手が離れないのが素晴らしいです。
これはいいです。ありがとうございました。すばらしい。

ちなみに、初心者質問させてください。
C言語などで言う「#include "hoge.c"」のような、ソースファイル組み込みは
VBAでできるでしょうか?
   単にその位置に別ファイルのソースを挿入するだけの機能です。
   1つのボタンでの処理が長くなってきたので、別ファイルに分割したいと思っています。
   subにしてもよいのですが、変数をpublicで宣言したりとか、結構手間そうなので。
   includeというキーワードで検索したのですが、見つけられませんでした。


18 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 12:01:05 ]
そもそも#include "hoge.c"とかやるのが筋が悪い

19 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 12:09:50 ]
17です。
すごいページを見つけましたので、貼っておきます。
www.ne.jp/asahi/hishidama/home/tech/lang/index.html
こういうのが欲しかった、みたいな。素晴らしいページです。
このページに依れば、VBAには、#includeは無いみたいです。
ありがとうございました。

>そもそも#include "hoge.c"とかやるのが筋が悪い
そうなんですけど、
関数化で階層化すると、スタックの待避や復元などのオーバーヘッド時間で
処理が遅くなることもあるので、1関数内に書いてしまう私です。すみません。


20 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 12:43:52 ]
アホか



21 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 13:22:40 ]
関数呼び出し程度のオーバーヘッドが嫌なのに、VBやVBA使うの?

22 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 13:29:37 ]
すみません。組み込み屋なので、マイコンのときは気にしてしまいます。
エクセルはPCなので関係ありませんが、
記述スタイルを踏襲したいんです。


23 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 14:22:26 ]
頭固すぎw

24 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 14:26:57 ]
コボラーがJavaやるみたいなもんか

25 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 15:25:52 ]
(;゚д゚)ァ

26 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 16:31:15 ]
だめだこりゃ

27 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 16:54:02 ]
言語仕様や開発環境の違いをいちいち気にしてたら仕事にならない。適応力を試されてると考えるんだ。
複数の環境を使い分けられない人間はプログラマーをやる資格がない。

28 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 22:25:21 ]
最近打ち合わせでは分かり切ったことは飛ばして話を進めているのに
知識として持っててあたりまえのことを質問する馬鹿が増えた


29 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 13:12:27 ]
TABの保持にこだわる理由が分からん
変数の宣言位置を揃える古臭い書き方でもしてるのか?

30 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 13:18:02 ]
むしろ半角スペースになった方が揃うでしょ



31 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 13:18:44 ]
どんなエディタで見ても、ね
もちろん固定幅フォントにする必要はあるが

32 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 19:52:46 ]
2つのシートに行った来たりして、変数に数値を入れるマクロができました。
sub ○○を
標準モジュール、module1に記述しています。

ボタンを作ってクリックすればマクロが動かせると言うことで、
sheet1にボタンを作って、clickにて動くようにしたところ(コードはsheet1に移動)

rangeコマンド等が、sheet1を書き換えるようになってしまいました。

sheets("sheet2").select
range("A1").value = hogehoge

みたいな感じにして、従来はきちんとsheet2のA1に数値が入っていたのですが、
sheet1のA1に数値が入るようになってしまいました。

with sheet1のような感じになっているのですが、
どのように対処すればいいでしょうか?

33 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 20:00:25 ]
VBAを捨てる

34 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 20:03:15 ]
説明がよくわからないのでその.xlsをうpしてください

35 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 20:46:39 ]
>>32
その説明では状況がまったくわからないので答えようがない

36 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 22:03:54 ]
withsheet2で

37 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 22:05:30 ]
>>32
range("A1").value = hogehoge
のコードもsheet1にあったりする?

この状況だと対策は
Rangeへ シート指定する
 or
コードを標準モジュールに戻す

38 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 23:47:36 ]
>>32
それぞれのモジュールで
MsgBox Range("a1").WorkSheet.Nameとしてみな。

39 名前:デフォルトの名無しさん [2010/04/18(日) 01:39:24 ]
>>29
>TABの保持にこだわる理由が分からん
キミにはわからないだろうな、きっと。


40 名前:1/2 [2010/04/18(日) 02:05:26 ]
以下のようなランダム出題によるYES,NOクイズをつくりました。
しかし、無駄な記述が多すぎてクイズが100や200になったときには処理が遅くなる気がするのと、
もっと見易い書き方ができるような気がします。
(例えばいちいち問題文に""をつけるのは面倒くさいので、ans部分で一括してつけるとか)
修正できる方、修正お願いします。
また三択以上の問題(例.a.明智光秀、b.豊臣秀吉、織田信長)にするときの記述も思いつかないので、
そちらも教えてください。

Dim a As String
Dim b As Integer
Dim c As Integer

b = Int(3 * Rnd + 1)

If b = 1 Then
a = "本能寺の変を起こしたのは明智光秀である"
c = 0

ElseIf b = 2 Then
a = "関ヶ原の戦いは1500年に起こった"
c = 1

Else
a = "平城京が移転したのは710年である"
c = 0
End If

ans = MsgBox((a + "?"), vbYesNo, "質問")



41 名前:2/2 [2010/04/18(日) 02:06:08 ]
If c = 0 Then
Select Case ans
Case vbYes
MsgBox "正解"

Case vbNo
MsgBox "不正解"
End Select
Else
Select Case ans
Case vbNo
MsgBox "正解"

Case vbYes
MsgBox "不正解"
End Select
End If

42 名前:40 mailto:sage [2010/04/18(日) 02:11:21 ]
なお、一から書き直した方が作りやすい場合は、
私の記述を元にせずに、そちらを書いて下さい。

43 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 02:16:37 ]
無駄な記述が多すぎ
一から書き直した方が作りやすい
おまえに書いてやったら何かくれるなら書いてやらんでもない

44 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 02:25:42 ]
問題をプログラムに埋め込むな
せっかくExcel使ってるんだから
問題文と正解・不正解を
シートに記述出来るように汁


45 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 08:17:25 ]
>>40
そのままでも100や200なら大して遅くはなりませんから安心して下さい。
丸写しは感心しないので、まずは二択のプログラムを作ってみせてください。

二択の問題の例
問題   本能寺の変を起こしたのは誰か?aかbで答えなさい。
選択肢 a.明智光秀、b.豊臣秀吉
解答   (  )

46 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 09:00:20 ]
b

47 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 09:05:52 ]
c 織田信長

48 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 09:09:57 ]
俺をaとかbとか記号で呼ぶな

49 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 09:51:25 ]
d. 徳川家康
e. 千利休
f. 柴田勝家

50 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 22:19:22 ]
かなり既出であれば申し訳ありません

VBAでPDFファイルを作成したいのですが,以下の件で困っています
・ファイル名,出力先フォルダを指定できない

1,2回であれば,手作業でもかまわないのですが,
各事業所毎に出力するため30回ちかく保存先ダイアログが出る度に
ファイル名を入力して保存しています。

PCにはAcrobat,クロセPDF2などがインストールされています。

よろしくご指導ください。





51 名前:1/2 [2010/04/19(月) 01:01:43 ]
>>43-45
ありがとうございます。
参考にして2択問題をつくってみました。
vbyesnoでは作り方がわからなかったため、
ボタン式ではなくaかbを入力式にしました。

皆さんなら言うまでもなくわかると思いますが、
A列に問題文(本能寺の変をry)、B列に選択肢a(明智光秀)、
C列に選択肢b(豊臣秀吉)、D列に答え(a)がエクセルに入ってます。


Dim a As String
Dim b As String
Dim c As String
Dim ans As String
Dim d As String
Dim i As Integer

i = 1
a = Cells(i, 2).Value
b = Cells(i, 3).Value
c = Cells(i, 1).Value
d = Cells(i, 4).Value

52 名前:2/2 mailto:sage [2010/04/19(月) 01:02:31 ]
ans = InputBox(c + "? aかbで答えなさい。" & vbCrLf & "a." & a & " b." & b)

If ans = d Then
MsgBox "正解"

ElseIf ans <> "a" And ans <> "b" Then
MsgBox "aかbで答えて下さい"

Else
MsgBox "不正解"
End If

53 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 01:12:36 ]
クロセPDF2は使用禁止です

54 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 02:00:16 ]
× クロセ
○ クセロ

55 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 02:02:42 ]
>>50
出力する方法はたくさんありますし、何もかも説明するのは不可能です。
今はどんなマクロで出力していますか。保存の部分を書いて下さい。
たぶん少し修正するだけで自動化できる可能性があります。

56 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 02:40:55 ]
>>51
その方法だと、三択の時は解答がE列、四択だと解答がF列になってしまいます。
目的(この場合は解答)が同じセルは同じ列にまとまるようにすれば、
プログラムを作る手間が少なくなります。もう一工夫しましょう。

57 名前:デフォルトの名無しさん mailto:sage [2010/04/20(火) 08:41:10 ]
Invoke()は使えますか?またはその代替

58 名前:デフォルトの名無しさん mailto:sage [2010/04/20(火) 20:12:19 ]
IDispatch::Invokeなら、遅延バインディングしてれば内部で勝手に使うだろ。

59 名前:デフォルトの名無しさん mailto:sage [2010/04/21(水) 00:33:10 ]
>>56
なるほど。
つまり、A列が問題としたらB列を解答として、
数が可変な選択肢は最後の方の列に羅列した方がいいというおとですね。

60 名前:デフォルトの名無しさん [2010/04/21(水) 14:39:31 ]
質問です
VBAのFSOを使ってファイルを抽出
データのファイル名や最終アクセス日などリスト化
ここまではできたのですが指定した日付より
前のアクセス日時のものをほかの列にリスト化するということが
できません、どなたか教えて頂けませんか?



61 名前:デフォルトの名無しさん mailto:sage [2010/04/21(水) 14:49:42 ]
それはご愁傷様です

62 名前:デフォルトの名無しさん mailto:sage [2010/04/21(水) 15:54:34 ]
オートフィルタ→コピー

63 名前:たろう [2010/04/21(水) 19:32:46 ]
テキストボックスの設定でコンボボタンをクリックしたらテキストぼっくっすの数値をシート1のA列に記入しなさい
とまではわかったのですがテキストボックスが空白の時にデバックがかかってしまうのですが
どうやればかいひできますか?

64 名前:デフォルトの名無しさん mailto:sage [2010/04/21(水) 19:36:27 ]
テキストボックスが空白の時にテキストぼっくっすの数値をシート1のA列に記入しないようにすればいいよ

65 名前:たろう [2010/04/21(水) 19:36:52 ]
どうすればいいですか?

66 名前:デフォルトの名無しさん mailto:sage [2010/04/21(水) 20:56:33 ]
そんな初歩的な・・・。

67 名前:デフォルトの名無しさん mailto:sage [2010/04/21(水) 22:47:15 ]
文字列をひっくり返す関数下さい

in→あいうえお
out→おえうあい

こんな感じのです


68 名前:デフォルトの名無しさん mailto:sage [2010/04/21(水) 23:24:02 ]
特定の文字列を逆転させる

サンプルマクロは、アクティヴシートのA1の文字列を逆転させます。
Sub Sample()

Dim myStr As String
Dim myLetter As String
Dim i As Integer

i = Len(Range("A1").Value) + 1
While i > 1
i = i - 1
myLetter = Mid(Range("A1").Value, i, 1)
Select Case StrConv(myLetter, vbWide)
Case "゛", "゜"
i = i - 1
myLetter = Mid(Range("A1").Value, i, 2)
End Select
myStr = myStr & myLetter
Wend

Range("A1").Value = myStr

End Sub


69 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 14:37:40 ]
>>67
Function 反転(S)
  For i = 1 To Len(S)
    T = Mid(S, i, 1) & T
  Next
  反転 = T
End Function

70 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 14:41:08 ]
VBAで出来そうで思いつかないので知恵を貸してください。

1.ある商品を数箇所に店舗に卸します。
2.それぞれの店舗のオーダー数はバラバラですが、カートンは出来るだけ共通のものを使いたいと思います。
  ただし、取扱いに困るほど大きいものは使えません。
3・それぞれの店舗の発注数を入力するだけで、最適なカートン入数を弾き出せないでしょうか?

<例>
靴の発注(10足〜20足入りが最適)
店舗A  120足
店舗B   82足
店舗C  118足
店舗D  180足

10足入りをメインにすると、2足と8足入りの端数が出るため3種類のカートンが必要になります。
20足入りでも同様です。
そこで12足入りにすると、

店舗A  12足入*10 = 120足
店舗B  12足入*6 + 10足入 = 82足
店舗C  12足入*9 + 10足入 = 118足 
店舗D  12足入*15 =180足

ということで12足入と10足入の2種類で済みます。

こういった計算を自動でするにはどの様な式を組めばいいのか知恵を貸して頂きたく・・。

もしかしたら他スレで訊くべき内容かもしれませんが、計算に強い方がいらっしゃいましたら
知恵を貸してくださいm(_ _)m



71 名前:デフォルトの名無しさん [2010/04/22(木) 14:42:20 ]
ageさせてください!

72 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 15:07:34 ]
>>70
条件が「取り扱いに困るほど大きい」では計算ができません。
いくつ以下、と具体的な数字で示して下さい。

73 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 15:15:59 ]
>>67-69
Mid statementを使えば、For i=1 To Len(s)/2でできるだろ

74 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 15:20:17 ]
>>70
10足分入るカートンと、12足分入るカートンの2種類があって
最適な組み合わせを調べたいってこと?

75 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 15:22:28 ]
>>72
商品によって変わるので一概に言えません。
(例としては靴の場合で10-20足入としました)
とりあえず変数で示して頂ければ幸いです。

実務上では品目ごとにを許容範囲を設定し、参照する形にしたいと思います。

76 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 15:30:54 ]
>>74
全数を最小の種類のカートンで出荷するには、何足入と何足入のカートンを用意すればいいのか? 
ということを調べたいのです。

例では、
10足入の場合は、他に12足入と18足入の合計3種類カートンを作らなくてならないのに対し、
12足入では12足入と10足入の2種類で済むので効率的です。

実際は取引先も扱い商品も多数あり、いちいち考えるのが大変なので、
自動で最適結果を出したいと思っています。

77 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 15:51:37 ]
素因数分解と最大公約数がミソだが
カートン候補がありすぎるとプログラムも大変だな


78 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 16:06:33 ]
まず4C2で6通りの最大公約数を求める
@ この6つの公約数を見比べて、標準カートン10前後の奴の数が多い奴で1つ確定
30とか40とか大きくなったら10にするような処理が必要
それでまず2店舗〜4店舗が確定

残りの2店舗で割り切れない場合
A その2店舗の最大公約数があればそれでもう1種確定

それがなければ
B @の確定カートンで割った余りを求め、その余り2つに公約数があれば確定

それもなければ
C Bの商から1減らしてあまりを求め(つか、さっきの余りに@をプラスして)、その2つに公約数があれば確定

@で、標準カートンに近いものがない場合(2とか3とかにしかならない)
強引にカートンを10にしてしまいBから以下を4店舗分繰り返す


79 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 16:10:07 ]
仰るとおり、因数分解と公約数だな、と思ったのですが、
これが中々難しくて・・・

アタマが痛くなってきてしまいましたw

80 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 16:16:31 ]
店舗Eの発注が9足だった場合、許容範囲を9〜に下げて
そして9個いりのカートンは使うってことなのかな?



81 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 16:24:02 ]
力づくで計算したらいいのに
For K=カートン最小値 To カートン最大値
S=必要数(K)
If S > 暫定必要数 Then S = 暫定必要数
Next

82 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 16:32:03 ]
>>80
1つ違うくらいならそうしたいですが、大幅に違う場合は例外として扱うことになると思います。
(1000-5000個が適用範囲の商品に、15個の発注が来た場合など)

ただ、実際にはあまり少量のオーダーは受けないので無視して良い事例かと思います。

>>78
ちょっとイメージできないので考えさせてください・・


皆さんありがとうございますm(_ _)m

83 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 16:38:46 ]
VBAに関係ないことになると嬉々としてレスする奴がいるよな

84 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 16:39:33 ]
単純に
下1桁が2の倍数なら、12カートンを(1桁/2)個用意すれば、残りは10カートンで済む
どうせ奇数はないんでしょ?あっても繰り上げすれば済む

結論
全て12と10のカートンでおk

85 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 17:02:46 ]
>>84
すみません。カートン総数も減らしたいので出来るだけ多くパッキングしたカートンを基本にしたいのです。
書いてなかったですね。申し訳ない。
奇数もありますが、ご指摘のとおり繰上げ処理でも問題ないです。

なんかスレ違いな気がしてきたので、もうちょっと考えてみますねw

スレ汚し失礼しましたm(_ _)m

86 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 17:04:14 ]

この書き込みの意図がわかりません

87 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 17:32:08 ]
端数を切り上げてもいいんなら、12個入りのカートン1種類だけでいいじゃん
なんか条件が曖昧すぎるよ
コンピューターのプログラムってのは、もっと厳密に数字が決まってなきゃ作れないんだよ
条件が色々あるんなら、そのすべてをリストアップするか、法則を決める必要がある

88 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 17:38:18 ]
1カートン1個なら端数は出ないし1種類で済む

それでは困る場合は、「1カートンは最低でも何個以上にするか」「カートンは何種類以下に抑えたいか」
「端数がいくつまでなら切り上げ可能か」のような数字を商品ごとにすべて決めてデータベース化しないと。

89 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 18:00:49 ]
>>85
商品別にカートンと個の間に、もう1つ数量の単位(組とか)を設定する。
上記例の靴だったら2個=1組
適用範囲1000〜5000個のものだったら200個=1組 みたいなかんじ。
組数以下の端数は1組として切り上げる。

こういう設定でできないかな?

90 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 18:28:59 ]
エクセルが高くて買えないんですけど、タダで勉強するにはどうすればいいんでしょうか?



91 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 18:32:01 ]
>>90
openoffice

92 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 18:32:38 ]
>>90
ttp://msdn.microsoft.com/ja-jp/library/bb386107(v=VS.100).aspx

93 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 18:33:43 ]
体験版
www.forest.impress.co.jp/article/2006/12/12/msoffice2007trial.html

94 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 19:43:39 ]
勉強するだけなら買わなくてもいいだろ
ネットの解説サイトを見て回ってればいい
実際に使いたいなら>>91-93

95 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 22:15:02 ]
どうもありがとうございます!
タダでずっと使えそうなOPENOFFICEで頑張りたいと思います

96 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 23:48:31 ]
コードを"ゴリゴリ書く"ってよく言うけど、
これってVBAにも当てはまると思う?

Cやアセンブラならゴリゴリが似合うけど、
VBAならベタベタとか、ポロポロとかの方が
似合う気がするんだけど。

97 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 03:52:47 ]
>>96
ゴリゴリ書くって表現は、処理の根幹部分で既存のライブラリに頼らないとか、
規模が大きかったり開発期間が短い場合に使うものだから、言語の違いは直接は関係ない。

けど、VBAはOfficeの特定の作業を自動化するのが目的の言語だから、
関数を数個書いて終わるケースが大半を占める。「ゴリゴリ書く」ことも少ないだろうね。

たまに大規模なアプリをVBAで作っちゃう人もいるけど、それはVBを使った場合にくらべて
開発効率や処理効率が悪いことがほとんど。

98 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 04:04:01 ]
すべてのヘルプを読んでから質問するように

99 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 07:06:09 ]
VBA初心者です
この言語にはポインタみたいなのはないんでしょうか?
リンクリストとかのデータ構造はどうやって実装しているんですか?

100 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 07:42:43 ]
>>99
ポインタ型はありません。
リスト構造も標準では用意されていないので、実装はプログラマー依存です。
単なる整数型のインデックスと配列の組み合わせで実現することが多いと思います。



101 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 09:46:20 ]
>>97
どうもありがとう。
ゴリゴリってそういう意味があったんですね。
知りませんでした。
ちょっとしたネタのつもりが良レスもらって感謝です。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<189KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef