1 名前:デフォルトの名無しさん [2007/05/27(日) 00:06:58 ] ・まじめにExcelの機能を追及してみようと思う奇特なひと ・スキルがないのに無理やりVBAの仕事を押し付けられた普通のひと ・VBAなんていまさらやりたくないのに業務で仕方なく使っているひと ・とにかく漏れにこんな仕事まわすなと怒っているひと そんなM$大好きなひとからアンチM$なひとたちまで幅広くカバーするスレです 前スレ pc11.2ch.net/test/read.cgi/tech/1168308855/
239 名前:235 mailto:sage [2007/06/26(火) 01:33:37 ] >>238 説明悪くてすまん まずA1のセルを選択 B列のどこかにA1と同じデータがあったら(B10とする)C10をD1にコピー これをA10まで繰り返し vlookupじゃないの? 当初↓みたいなことをやってたのですが、データが各1万行とかになったら速度が恐ろしいことになりまして。 どうにかこれを高速化したいのです。 for count1=1 to Range("A65536").End(xlUp).Select for count2=1 to Range("B65536").End(xlUp).Select if Cells(count1,1).value = Cells(count2,2),value then Cells(count1,4).value = Cells(count2,3).value end if next count2 next count1
240 名前:デフォルトの名無しさん [2007/06/26(火) 01:47:48 ] >>239 ああ、確かにVLOOKUPだな。 この感じだと、セルD4に 「=VLOOKUP(A1,B:C,2)」って入るよな。 それをセルD10まで下にコピーするのじゃいけないの?
241 名前:235 mailto:sage [2007/06/26(火) 01:58:26 ] >>240 各1万行くらいで行数が不定なのです まとめて出来る(で、forより早い)方法があればvlookupでなくてもなんでもいいのですが
242 名前:デフォルトの名無しさん [2007/06/26(火) 02:17:26 ] >>241 もう頭が働かないんで… とりあえず235で質問してたRangeを変数に代入する方法 Dim targetRange As Range Set targetRange = Range("A65536").End(Xlup) これでtargetRange.Rowで最終行が何行目か分かる。 ちなみにforでも一万行くらいならあまり時間かからないような気がする。 forのネストにする意味が分からない。一致したらExit For でFor文を 抜ければいいのに。
243 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 03:15:16 ] >データが各1万行とかになったら速度が恐ろしいことになりまして 実行中の画面描画をOFFにしてないんじゃない? そこ変えるだけで解決することもあるよ
244 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 03:20:47 ] Application.ScreenUpdating = False 処理の終了段階でTrueに戻して下さい。 Application.EnableEvents = False 処理の終了段階でTrueに戻して下さい。 Application.Calculation = xlCalculationManual 処理の終了段階でxlCalculationAutomaticに戻して下さい。 マクロ動作中にEscキーで止められるのを抑制する。 マクロ動作中に一切のキーやマウス操作を制限する。 Application.Interactive = False 処理の終了段階でTrueに戻して下さい。 但し、この状態で何らかの理由でマクロが停止してしまうと、Excel自体は何も操作できない状態になってしまい、タスクマネージャで強制終了させなければならなくなります。この記述だけは確実に動作検証が終わってから設定して下さい。 マクロ動作中はマウスカーソルを「砂時計」にする。 Application.Cursor = xlWait 処理の終了段階でxlDefaultに戻して下さい。 www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_090_040.html
245 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 04:00:51 ] >>235 Range("D1").Resize(Cells(Rows.Count, "A").End(xlUp).Row).Formula = _ "=VLOOKUP(A1,B$1:C$" & Cells(Rows.Count, "C").End(xlUp).Row & ",2,FALSE)" >>244 >何も操作できない状態になってしまい、タスクマネージャで強制終了させなければならなくなります。 イミディエイトウィンドに Application.ScreenUpdating = True で、エンターキー
246 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 00:07:51 ] A B C D 東京 東京 東京 =LOOKUP(A1,B:B,C:C) 大阪 大阪 愛知 名古屋 福岡 福岡 北海道 札幌 とするとD1が名古屋になるんだけど気のせい?
247 名前:235 mailto:sage [2007/06/27(水) 01:06:07 ] >>242 ,243,244,245さん、ありがとうございます。 >>242 逆でして、 for i=1 to Range("A65536").End(Xlup) Range("A"i).select next i みたいなことがしたかったのです。 >>243 ,244,245 本日ぐぐりまくってとりあえずそこらへんの設定をしました。 やりたいことを綴ってたらえらい長くなってしまったので表にしました(とりあえずodsとxml) 見ていただければ幸いです ttp://bebe.run.buttobi.net/up/src/be_1262.zip
248 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 01:10:52 ] 2003personalだとエラーが出て開けない
249 名前:235 mailto:sage [2007/06/27(水) 01:21:05 ] うゆー ってか、今更xlsを発見した。すまねぇ ttp://bebe.run.buttobi.net/up/src/be_1263.zip
250 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 01:27:13 ] なんか昔、これの横バージョンを総合相談所のほうでコード書いた気がする…
251 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 01:52:19 ] 横バージョンじゃなくて、似たような表の作成だった。 相談所55の部品表のをいじればなんとかなるんじゃないかな。 実行速度もシートをメモリに読み込んですれば大丈夫だろう。 もう寝る。
252 名前:245 mailto:sage [2007/06/27(水) 17:46:50 ] 'Microsoft Scripting Runtime を参照設定 '結果はG,H,I列の1行目以下に出力 '結果出力用配列 出力行数を上回る行数を確保。下回るとエラー Dim ans(5000, 2) As String Dim d As New Scripting.Dictionary Dim v() As Variant Dim buf As Variant Dim vv As Variant Dim i As Long Dim n As Long v = Range("D1", Cells(Rows.Count, "E").End(xlUp)).Value For i = 1 To UBound(v) If d.Exists(v(i, 1)) Then d(v(i, 1)) = d(v(i, 1)) & vbTab & v(i, 2) Else d.Add v(i, 1), v(i, 2) End If Next i v = Range("A1", Cells(Rows.Count, "B").End(xlUp)).Value
253 名前:245 mailto:sage [2007/06/27(水) 19:00:43 ] For i = 1 To UBound(v) If d.Exists(v(i, 1)) Then buf = Split(d(v(i, 1)), vbTab) For Each vv In buf ans(n, 0) = v(i, 1) ans(n, 1) = v(i, 2) ans(n, 2) = vv n = n + 1 Next vv Else ans(n, 0) = v(i, 1) ans(n, 1) = v(i, 2) n = n + 1 End If Next i Set d = Nothing Range("G1").Resize(n, 3).Value = ans
254 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 21:42:09 ] をいをいw
255 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 23:38:13 ] >>254 どうした?
256 名前:デフォルトの名無しさん [2007/06/28(木) 09:32:06 ] >>252 >>245 関連ではないのだが、 > 'Microsoft Scripting Runtime を参照設定 > Dim d As New Scripting.Dictionary これってなに?VBAから、WSHのオブジェクトを呼び出しているわけ?
257 名前:デフォルトの名無しさん [2007/06/28(木) 17:31:08 ] すいません。質問です。 シート1のあるA1に「A」、A2に「B」、B1に「1」、B2に「2」が入っています。 シート2にはA1に「A」、A2に「3」、B1に「B」、B2に「4」が入っています。 シート1のA1の「A」を検索した上でその下のセルにある「1」をシート2の「A」の横にあるセルに入力し、且つそのセルにあった数値(ここでは3)を右にシフトしたいのです。 VBではどうすればいいですか?
258 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 19:38:54 ] Shift:=xlToRight
259 名前:235 mailto:sage [2007/06/29(金) 00:17:52 ] 相談所55が見つからなかったので自力で作ったよ! よく考えたら別に一枚のシートじゃなくていいじゃん、ということに遅まきながら気付いたので for i,j=1 to 各行数 If Cells(i,1).value = Cells(j,4).value then k=k+1 Sheet("Sheet2").Cells(k,1).value = Cells(i,1).value Next j 〜(マッチしなかったときの処理とか)〜 Next i 的な流れで完成したお! 遅いお! >>252 何これ!チョー早い! 意味が全然分からないけど今から修行する!さんくす! ところで=minute(now())とかsecond(now())とか並べてるとyear(now())だけ変になるんだけど何故?
260 名前:デフォルトの名無しさん [2007/06/29(金) 00:24:35 ] 値のコピー貼付をワークブック間で行いたいのですが、 ' @コピー元 Workbook("").Sheets("").Activate Range("").Copy ' Aコピー先 Workbooks("").Sheets("").Activate Range("").Select Selection.Pastespecial Paste:=xlValues ファイルをまたぎ、かつ値貼付の場合このような段階を踏まないとエラーになってしまいます。 同シート内での値コピーに使える Range("").Copy Range("").Pastespecial またはRange("")=Range("") のような簡潔な記入法は無いものでしょうか?
261 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 00:42:07 ] ですてぃねーしょん
262 名前:デフォルトの名無しさん [2007/06/29(金) 01:05:23 ] すみませんが、ひとつ教えてください。 階乗を計算する関数を作成したくて、 以下のようなプログラムを書いたのですが、 戻り値が0です。 なぜでしょうか? (ちなみに、xxをkfactにすると、正常に動くようです) ぜひ、ご回答お願いいたします。 Public Function kfact(n As Integer) As Integer Dim i As Integer Dim xx As Integer i = 1 xx = 1 Do While i < n xx = xx * i i = i + 1 Loop End Function
263 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 01:26:15 ] >>262 Public Function kfact(n As Integer) As Integer Dim i As Integer Dim xx As Integer i = 1 xx = 1 Do While i < n xx = xx * i i = i + 1 Loop '↓これ追加(戻り値) kfact = xx End Function ちなみに階乗なら=fact()って関数あるけど それじゃダメなん? VBAで使うならApplication.WorksheetFunction.Fact()ね
264 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 16:35:16 ] >>256 わけ。特に珍しい手法ではない。 Dictionaryやfsoは便利なので結構良く使うと思う
265 名前:デフォルトの名無しさん [2007/06/29(金) 20:11:27 ] エクセル2003、ウィンXPです。 以下の様なマクロを作成しました。 データの抽出後に、可視セルの値を順に特定セルに入れて、 印刷したいのですが、思った様に動作しません・・・。 どなたか、お知恵を! Sub 抽出と印刷() '書類作成用にデータを抽出。 'シート1のBP列がゼロで無いものを抽出。 Sheets("シート1").Columns("BP:BP").AutoFilter Field:=1, Criteria1:=">0", Operator:=xlAnd '抽出されたリストのBP列の値をシート2のD68に順番に入れて、2枚ずつ印刷する。 ‘抽出から除外された行は印刷からも除外したいので、可視セルだけで処理したい。 Dim i As Long For i = 2 To Worksheets("シート1").Cells(Worksheets("シート1").Rows.Count, 1).End(xlUp).SpecialCells(xlCellTypeVisible).Row Worksheets("シート2").Range("D68").Value = Worksheets("シート1").Cells(i, 1).SpecialCells(xlCellTypeVisible).Value '印刷処理をします。 Sheets("シート2").PrintOut copies:=2, Collate:=True, preview:=True Next i End Sub
266 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 20:28:14 ] >>256 ,264 > これってなに?VBAから、WSHのオブジェクトを呼び出しているわけ? 正確には違う Microsoft Scripting RuntimeはWSHのインストーラーパッケージに含まれてはいるが Scripting.DictionaryはWSHのオブジェクトではなく、ActiveXの汎用コンポーネントに含まれるオブジェクト WSHのオブジェクトじゃないから、WSHから使う場合もWSHのオブジェクトであるWScriptオブジェクトみたいに いきなり使うことは出来ず、CreateObjectなどで外部参照してやる必要がある
267 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 23:03:58 ] ShowしたUserFormってどうやって閉じていますか? UserForm1.Close こんなのないよね? Unload Meってのはいまいち分からない。不便。
268 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 23:08:07 ] Unload UserForm1
269 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 23:24:03 ] >>268 サンクス
270 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 23:25:06 ] >>265 どこが思ったように動作しないのか説明がないけど 抽出したあとCopy使えばいいよ >>267 UserForm1.Hide
271 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 00:04:38 ] >>270 Hideは見えなくなるだけ
272 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 00:46:27 ] >>271 うん、でも>>268 の人がもう答えてたから他のを書いた あと一応はShowとHide、LoadとUnloadが対応になってるかなと思ってるし
273 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 01:35:58 ] Accessではclose使えるのに どうしてExcelではだめなのでしょう?
274 名前:262 [2007/06/30(土) 01:50:26 ] 263 ありがとうございます。 ワークシート関数ってオーバーフローするイメージがあるので、あんまり好きじゃないのです。
275 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 00:50:52 ] >>92 Application.FileSearchは削除されたよ。 以前から挙動不信だったんで、存在そのものを抹消したのだと思われ。
276 名前:デフォルトの名無しさん [2007/07/01(日) 03:23:57 ] 5人で30回じゃんけんをして、出した手をB〜Fに書き込み、勝敗をG〜Kに 書き込むマクロを短めで作りたいのですが、勝敗パターンを作る以外の方法が思いつきません。 よろしくお願いします。
277 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 04:25:41 ] >>276 >>16 さようなら
278 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 08:47:13 ] >>275 あー確かに挙動不振だな
279 名前:デフォルトの名無しさん [2007/07/01(日) 09:19:11 ] 置換について質問です。 以下の様にすると、"さんま"という文字列を"魚"に置換できるのですが、 "さんま"、"タイ"、"いわし"のいずれかの場合に"魚"に置換する場合はどうやって指定しますか? Selection.Replace What:="さんま", Replacement:="魚"
280 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 09:31:10 ] >>279 with Selection .Replace What:="さんま", Replacement:="魚" .Replace What:="タイ", Replacement:="魚" .Replace What:="いわし", Replacement:="魚" end with
281 名前:デフォルトの名無しさん [2007/07/01(日) 09:38:53 ] >280 ありがとうございます!
282 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 10:13:19 ] >>276 総合で訊いてる奴だよな?
283 名前:280 mailto:sage [2007/07/01(日) 10:20:13 ] >>281 ぉぃ! まさか、こんなこと訊いてるんじゃないよなぁ...と思いながら、 答えてみたんだが、解決かよ(-_-#);
284 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 10:57:24 ] 釣りだろ
285 名前:デフォルトの名無しさん [2007/07/01(日) 11:57:26 ] シートAに以下のマクロ実行するボタンがあります。 シートBを選択した状態だと問題なく動作するが、 シートAから実行するとエラーがでます。 最終的にシートA以外は不可視にしたいので、 Worksheets("シートB").select をしたくないです。 何か良い方法有りますか? Worksheets("シートB").Range(Cells(1, 1), Cells(100, 100)).Sort Key1:=Range("a1"), Key2:=Range("d1"), Header:=xlYes
286 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:11:49 ] Set ws = Worksheets("シートB") With ws .Range(.Cells(1, 1), .Cells(100, 100)).Sort Key1:=.Range("A1"), Key2:=.Range("D1"), Header:=xlYes End With
287 名前:デフォルトの名無しさん [2007/07/01(日) 15:26:32 ] >286 有難うございます。 試してみましたところ、シートBが選択された状態では動作しました。 シートAが表示された状態で実行すると、 「アプリケーション定義またはオブジェクト定義のエラーです」となります。
288 名前:デフォルトの名無しさん [2007/07/01(日) 19:25:16 ] Σ(゚∀゚;) ?
289 名前:デフォルトの名無しさん [2007/07/01(日) 19:45:48 ] 285です。 解決しました。 Worksheets("シートB").Range(Worksheets("シートB").Cells(1, 1), Worksheets("シートB").Cells(100, 100)) _ .Sort Key1:=Worksheets("シートB").Range("a1"), Key2:=Worksheets("シートB").Range("d1"), Header:=xlYes
290 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 20:52:21 ] >>289 これって>>286 と何が違うん?
291 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 22:42:36 ] Excel2003なのですが、 VBエディターで編集したマクロをリロードするための ファンクションキーってありますでしょうか?
292 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 23:01:44 ] エクセルの2つのシートを比較するマクロを作っているのですが、 行と列のサイズが大きくなると処理が重くなります。 1000*256ぐらいで処理が重くなります。 これは、仕様なんでしょうか。 For i=0 To 65536 For j=0 To 256 比較 Next Next 使われているシートの範囲を読み取るとか 範囲を設定するとかすればいいと思っています。 指摘などありましたらよろしくお願いします。
293 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 23:19:53 ] >>292 Dim s As Range Set s = ActiveCell.SpecialCells(xlLastCell) MsgBox s.Column & " " & s.Row
294 名前:デフォルトの名無しさん [2007/07/02(月) 20:40:46 ] arry(あ,い,う,え,お) を、 ExcelのセルA1〜E1に 一気に貼り付ける方法てないですかね。 For文で順番に セルA1に「あ」を入れて セルB1に「い」を入れて… というのは分かるんですが。 なんかもっとこう効率良いやり方ないかな。
295 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 21:05:35 ] >>294 おしい、そこまでいけて何故できないw Range("A1:E1") = Array("あ","い","う","え","お") 是非感想を。
296 名前:デフォルトの名無しさん [2007/07/02(月) 21:14:58 ] >>295 で、できたー!! ありがとう。これでよかったのか… Pasteにばっか気をとられてたわ。
297 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 00:16:07 ] VBAのコードを含んだブックを余所にあげたりするとき、デジタル署名とか どうしてますか? 律儀にベリサインから買ったりしてるんでしょうか?
298 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 06:33:52 ] SelfCert 外に出すときは、署名壊れたとき用に対応策(向こうで再署名)を書いておく # ソースは見られるが管理者だけなら問題なかろう 2000ならこれでOK それ以降なら我慢して使ってもらうしか。 一応、毎回署名を確認してもらう事に… 既に署名を持っているならともかく、予算的にExcelの為に申請なんて出せないし。
299 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 09:15:58 ] 売る場合はともかく、あげる場合は向こうで勝手に対応してもらう
300 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 11:31:57 ] Set objIE = CreateObject("InternetExplorer.application") で、IEを起動しています。 なんらかの操作で、IEのウインドウが最小化された場合に備えて、それを「元のサイズに戻す」の 処理を行いたいのです。 検索してみたところ、VBでは、SW_SHOWNA の利用で良いみたいですが、 同様の処理をVBAで行いたいのです。 ojbIEに対して処理を加える方法は無いでしょうか? 他に考えたのは、API32を参照しobjIEとは関係なく処理を行うですが、そうした方が良いのでしょうか? よろしく御願いします。
301 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 12:10:35 ] >>300 >>16
302 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 12:41:01 ] 厳しいなあw
303 名前:300 mailto:sage [2007/07/03(火) 16:21:57 ] Declare Function ShowWindow Lib "user32.dll" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long If objIE.Top < 0 Then ShowWindow objIE.hWnd, 9 'SW_RESTORE アクティブにもなる。 End If で解決しました。objIE.Top < 0 は怪しいですが、良しとします。
304 名前:デフォルトの名無しさん [2007/07/03(火) 18:42:33 ] >>295 それ、A1:E1ならできるけど A1:A5だとうまくいかない。なんでだろ?
305 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 20:17:56 ] >>302 × スレ違い指摘が厳しい ○ 質問者がVBAの範疇を理解してない
306 名前:デフォルトの名無しさん [2007/07/04(水) 17:34:35 ] VBAというか、プログラミングの初心者です。 変数のスコープ(有効範囲?)のことでハマッっています。 UserForm1のなかの冒頭でPublicとして宣言した変数aの値を (この値は同じくUserForm1内にPublicとして記述されたプロシージャによって代入される) UserForm2のなかのプロシージャ内でmsgbox(a)として表示しようとするのですが、 値が空白になってなにも表示されません。 UserForm1 UserForm2のすべてのプロシージャをPublicにしても同じです。 こんなボケに対する、どなたかツッコミをお願いします。
307 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 17:47:03 ] Msgbox(UserForm1.a) 理由:ユーザフォームはモジュールではなくクラスだから
308 名前:304 [2007/07/04(水) 19:03:53 ] 自己解決。 これでいけた。 Range("A1:A5") = Application.Transpose(Array("あ", "い", "う", "え", "お"))
309 名前:306 mailto:sage [2007/07/04(水) 22:42:37 ] >>307 助言くださったとおり、うまくいきました。理由を書いてくださったのがヒントになり、 Public変数をUserFormではなく標準モジュールのほうで宣言すればいいことに 気がつきました。どうも有難うございました。
310 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 12:37:25 ] >Public変数をUserFormではなく標準モジュールのほうで宣言すればいい 死ね
311 名前:デフォルトの名無しさん [2007/07/05(木) 21:18:05 ] あの子ったら、また私のパンティを……。 息子の康彦を学校へ送りだし、洗濯にかかろうとした美沙緒は、 洗濯機のなかに無造作に放りこまれた自分のパンティを見て、大きく溜め息をついた。 困ったわ。どうすればいいのかしら?…… パンティを手に持ったまま、美沙緒は考えこんでしまった。 康彦は十四歳の中学二年生。七つ年上のいまの夫と大恋愛に落ちた美沙緒が、 周囲の猛反対を押しきって、十八歳のときに産んだ子だ。 その康彦の不可解な行動に美沙緒が最初に気づいたのは、もう一年近くも前のことになる。
312 名前:デフォルトの名無しさん [2007/07/05(木) 21:23:27 ] 小学生の頃、同じクラスのヤシんちに行った。ソイツの姉ちゃんは高校生でキレイだった。 化粧してるのをボケーと見てた。 「何で見てるの?」 やさーしく微笑んでくれた。 「ち、ちゅーしたい!」 おいら、とっさに言った。 姉ちゃん、頭なぜなぜして、オデコにちゅーしてくれた。 「口紅ついちゃったわね」 コットンでキレイにしてくれた。 おいら、コットンを奪って逃げた。 次の日、姉ちゃんに告った。 「お姉ちゃん、彼氏いるの」 おいら「ならば、貴様を殺して永遠に我と共に」 姉ちゃん「よかろう。来るが良い」 虚空を突き破る轟音。空気を切り裂く甲高い音。 おいらの口から鮮血があふれ出す。 おいらの拳は僅かに届かず、逆に手刀が胸に突き刺さっている。崩れ落ちるおいら。 おいら「・・・これで、貴様は俺を忘れないだろう。ぐ・・」 姉ちゃん「忘れはせぬ。貴様の魂我が心と共に。悲しき男よ。誰よりも愛深く、拳でしか愛を語れぬゆえに」 死してなおその男の顔に浮かぶ表情は喜びであったか悲しみであったか。 その時、一陣の風が吹いた。 愛に死んだ修羅の魂を運び去るように。
313 名前:: [2007/07/06(金) 22:24:01 ] 00年 01年 02年 03年 売上高 キャベツ 500 400 300 200 ニンジン 600 300 400 500 トマト 400 400 500 400 レタス 300 500 600 300 年代別に最も多い売上高の野菜を調べるためのアルゴリズムってどうすればいいんですか? 上の例で言うと00年の売上高がもっとも高いのはニンジンなのでマクロをつかって00年 ニンジン、01年レタスというようにセルに順番に出していきたいんですがどうすればいいんで しょうか?
314 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 23:04:40 ] >>313 VBAを使うまでもない。よってスレ違い。
315 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 23:18:00 ] >>310 >死ね って、どういう意味ですか?
316 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 23:24:52 ] >>315 つ[辞書] つ[goo.ne.jp]
317 名前:: [2007/07/07(土) 01:04:04 ] >>314 課題でどうしてもVBAを使ってやらないとだめなんです。 まだはじめたばかりで普通にやったほうが早いんですけど。 せめてどのような文法を使ったらいいのかだけでも教えてもらえませんか?
318 名前:デフォルトの名無しさん [2007/07/07(土) 01:54:03 ] >>317 ここは宿題スレじゃない
319 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 11:55:37 ] 00年 01年 02年 03年 売上高 キャベツ 500 400 300 200 ニンジン 600 300 400 500 トマト 400 400 500 400 レタス 300 500 600 300 ニンジン レタス レタス ニンジン
320 名前:>314 [2007/07/07(土) 14:28:49 ] Sub CHEATFROM2CH() For c = 2 To 5 val1 = 0 val2 = "" For r = 2 To 5 If Cells(r, c) > val1 Then val1 = Cells(r, c) val2 = Cells(r, 1) ElseIf Cells(r, c) = val1 Then val1 = val1 val2 = val2 & "と" & Cells(r, 1) ElseIf Cells(r, c) < val1 Then val1 = val1 val2 = val2 End If Next r Cells(12, c) = val1 & "円の" & val2 Next c End Sub もっと削れるけど、このままの方がわかり易くていいだろ…
321 名前:デフォルトの名無しさん [2007/07/07(土) 16:26:12 ] シート2に顧客番号と名前のリストを置いて、 シート1のA1に、例えば「10」と入力した時にそれに対応するシート2の 顧客番号10番の名前を、シート1のA2に表示させたいんですが。 初心者の俺でもできるかなと思いましたが分かりませんでした。 orz よろしくお願いいたします。
322 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 16:56:22 ] >>321 それを何故VBAでやりたい? シートだけでできるっしょ。
323 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 17:06:56 ] B列にhh:mm:ss形式で入っている時刻をまず文字列(’シングルクォーテーションをいれるみたいなイメージなんですが)にして、 次にA列の文字列と連結してC列に表示していきたいのですが、 B列のhh:mm:ss形式をそのままの形で文字列にするにはどうすればよいのでしょうか?
324 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 17:28:31 ] しょうがねぇなぁ…… 手元にOpenOfficeしかないから適当に読み替えて試してくれ。 >>321 顧客番号がA列、名前がB列として、 A2 =vlookup(a1;シート2.a1:b9999;2) >>323 C5 =a5&text(b5;"hh:mm:ss")
325 名前:321 mailto:sage [2007/07/07(土) 17:59:42 ] >>324 早速のレスありがとうございました! 試してみてエラーが出たので悩みましたが、 =VLOOKUP(A1,Sheet2!A1:B9999,2,TRUE) でうまくできました! 2人でやっているお店で店長が入院してしまい、自分1人ですべてこなすために 手書きでやっていた部分の仕事をどうしても合理化しなくてはいけなかったので とても助かりました。ありがとうございました。
326 名前:321 mailto:sage [2007/07/07(土) 18:56:36 ] すみません、追加で質問させてください。 顧客が9999人だった時に、10000以上の数字を誤入力してしまうと 9999番目の人が表示されてしまいます。データの入力規則で縛ろうにも、 毎日顧客は増えていきますのでその度に手直しできません。 良い知恵がありましたらよろしくお願いいたします。
327 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 18:57:55 ] 数式を穴があくまで見つづけろボケ
328 名前:: [2007/07/07(土) 22:05:29 ] >>320 まじでありがとうございます。 自分もこんなふうにできるようになりたいです
329 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 22:09:53 ] >>328 1週間くらい勉強すれば、このくらい出来るようになるよ
330 名前:: mailto:sage [2007/07/07(土) 22:29:29 ] お世辞だよ
331 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 22:44:56 ] 初心者なのですが、質問させて下さい。 環境はWinXP+Excel2003です。 VBAでFor文を使ったネスト構造を作っています。 3階層のネスト構造の場合、 各変数x,y,zとして以下のロジックを作ってみました。 For i = 1 to 3 For j = 1 to 3 if i = j then exit for For k = 1 to 3 if j =k then exit for if k=i then exit for <処理> Next k Next j Next i 期待としては、同じ数が出たときだけスルーするロジックになって欲しかったのですが。 実際には、そうはならず、9パターン中、1-2-3と1-3-2と2-1-3と2-3-1と3-1-2と3-2-1の 6パターン処理されるつもりだったのに、2-3-1と3-2-1の2パターンしか処理されませんでした。 ロジックのどこがおかしいのでしょうか。 おそらく、exit for の設定を私が判っていないせいの様な気がするのですが…
332 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 23:03:30 ] そりゃぁ、exitでforから抜けちゃってるからねぇ。
333 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 23:06:37 ] うすうす気付いてるようだけど、ループのスキップではなく、ループの終了(Exit For)をしてるから 1=1でExit Forすると、以後の2〜3は処理されない For i = 1 To 3 If i = 1 Then Exit For Debug.Print i Next i で、2と3が出力されませんと言ってるようなもの 一致条件でExitではなく、不一致条件内に内部ループや処理を置けばいい
334 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 23:32:36 ] >>332 >>333 迅速なレスをありがとうございました。 やはり、Exit Forが悪いと言うことで、 当該部分を削除し、以下のように変更したところ、期待通りの結果が出来ました。 if i = j then elseif j = k then elseif i = k then else <処理> endif 適切なヒントを下さり、本当にありがとうございました。
335 名前:>326 mailto:sage [2007/07/08(日) 01:15:38 ] 引数に"TRUE"を使うからそうなる。 "TRUE"だと完全一致しなくてもデータを読んでしまうので "FALSE"(完全一致必須)にするのが一般的 蛇足すると、Sheet2がデータ専用なら行数を限定する必要は無い VLOOKUPのデータ元参照式には、参照範囲のズレを防ぐため普通$を付ける。 てことでこんなんが妥当かな。 =VLOOKUP(A1,Sheet2!$A:$B,2,FALSE) ところでここVBAスレなんだけど…
336 名前:321 mailto:sage [2007/07/08(日) 02:56:27 ] >>335 詳しく解説していただき本当に感謝です。 正直、TRUEやFALSEの意味もろくに分かっていなかった自分です。 スレタイだけ見てここで質問してしまい、大変お邪魔しました。
337 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 07:08:08 ] >>335 ExcelとVBAの質問スレらしいよ
338 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 07:55:16 ] ×ExcelとVBAの質問スレ ○ExcelのVBAの質問スレ 例えスレ立て主の意図が前者だろうと、2chの規則的には プログラム技術板でExcelのVBA以外の話は板違いになるからね
339 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 11:08:17 ] すこしスレ違いだが、皆さん大丈夫? ttp://itpro.nikkeibp.co.jp/article/COLUMN/20070620/275328/ Excelレガシー問題