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


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

Excel VBA質問スレ Part8



1 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 23:16:33 ]
ExcelのVBAに関する質問スレです

前スレ pc11.2ch.net/test/read.cgi/tech/1212587819/

★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。

★2 ExcelのVBA以外の部分に関する質問はNGです。
   但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。

★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。
   
 VBAとは、『Visual Basic for Application』の略で
  Application
  ├Workbooks
  |└Workbook
  |  ├Worksheets
  |  |└Worksheet
 というApplication以下のオブジェクトを、VB言語で操作するものを指します。 
 例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
 セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。

★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。

★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み
   コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
   ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。

★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)

630 名前:629 mailto:sage [2008/10/24(金) 12:20:32 ]
今テストしてたんだが離れたセルを選択した時に期待どおりの動きしないな・・・

631 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 12:22:27 ]
>>629
? range("$A$2:$A$5,$A$5:$A$10").cells.count
10
? union(range("$A$2:$A$5"),range("$A$5:$A$10")).cells.count
9
? union(range("$A$2:$A$5"),range("$A$5:$A$10")).address
$A$2:$A$10

「特定の1列のみ」だそうだからOKかなと

632 名前:629 mailto:sage [2008/10/24(金) 12:29:12 ]
RangeをUnionに書き換えたらいけたような気がするw

633 名前:デフォルトの名無しさん [2008/10/24(金) 14:52:48 ]
有難うございます。
Set rg2 = Union(rg2, rg1)
に変更したら上手くいきました。

もう1つ教えて下さい。
選択された範囲の行を対象に特定の列(例では8列目)を以下の様に集計して
いますが、選択範囲から集計範囲(特定列)への変換にもっと簡単なやり方が
ありますでしょうか?

Dim vals As Variant, i As Integer, c As Integer, addr As String
c = 8
vals = Split(Selection.Address, ",")
For i = 0 To UBound(vals)
With Range(vals(i))
vals(i) = Range(Cells(.Row, c), Cells(.Row + .Rows.Count - 1, c)).Address
End With
Next
addr = Join(vals, ",")
Debug.Print WorksheetFunction.Subtotal(9, Range(addr))


634 名前:633 mailto:sage [2008/10/24(金) 16:24:56 ]
列の特定と同時に重複を削除しないと駄目のようです。
>>629さんの方法に組み込むと良い様に思います。

Set r1 = Cells(rg1.Row, 8)
Set r2 = Cells(rg1.Row + rg1.Rows.Count - 1, 8)
If rg2 Is Nothing Then
Set rg2 = Range(r1, r2)
Else
Set rg2 = Union(rg2, Range(r1, r2))
End If


635 名前:デフォルトの名無しさん [2008/10/24(金) 16:33:53 ]
質問です。
エクセルで資料を作ったがMacroで両面コピーの方法が分からないので両面コピーの方法を教えて下さい。

636 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 19:46:01 ]
質問です
訳あって欧文(ウムラウトを含むラテン文字の文章)の書き込まれたExcelシートから
内容を読み出してテキストファイルに起こしたいのですが、
Cells(?,?).valueやCells(?,?).TextからStringsの変数に読み出した時点でウムラウトが飛んで
近しい形状の通常のアルファベットに置き換えられてしまうようです。

結構ぐぐって見たのですが、読み出せなくて困った的な話はいくつか見つけたのですが
対処法について言及しているページが無かったので、皆さんのお知恵をお借りできないかと
思って書き込みさせていただきました。
なにかお知恵などありましたらよろしくお願いいたします<(__)>

637 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 20:14:02 ]
>>635
何を何処へコピーするのか

638 名前:デフォルトの名無しさん [2008/10/24(金) 20:26:20 ]
両面コピーって両面印刷の事?プリンタの話になるんじゃないの?



639 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 20:33:08 ]
>636
元となるExcelファイルは、Excelのどのバージョンで作られたものですか?
あるいは、どこの国用のExcelで作られたものでしょうか?
VBAを利用せず、直接シートの必要な範囲をコピーしてエディタへ(ウムラウトは消えずに)
ペーストすることはできたのでしょうか?

↓このサイトは見ましたか?
www.microsoft.com/japan/office/ork/three/intd02.mspx
Office XP リソース キット / 国際環境での導入計画 / 国際環境でのメンテナンス
Unicode サポートの活用
「多国語テキストのコピー」の項と、「VBA で Unicode 値を使用する」の項が参考になるかも。

640 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 21:48:44 ]
あるサブルーチンをForループで回すと100回くらいなら一瞬で終わるんですが、
500回とかそれ以上になるとなぜか無限ループにでも入ったみたいに計算が終わってくれません。
オーバーフローのエラーメッセージが出ることもないし、実際オーバーフローするほど大きな数を扱っているわけでもない。
原因としてはどんなことが考えられるでしょうか?

641 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 21:53:05 ]
サブルーチンのforカウント変数をステータスバーにでも表示してデバッグのヒントにするのだ。
その情報だけだと、メモリかCPU?としか言えない。

642 名前:デフォルトの名無しさん [2008/10/24(金) 21:55:54 ]
>>635

sub 裏表印刷()

印刷実行

Msgbox ゛用紙裏面をセットしてください゛

印刷実行

end sub

643 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 21:56:08 ]
>>641
メモリっぽいですね。ちょっと調べてみます。
ありがとうございました。

644 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 22:09:55 ]
>>640
DoEvents
homepage2.nifty.com/kasayan/vba/doevents.htm

645 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 00:45:40 ]
636です

>>639
動作環境を書くのをすっかり失念してました
この手の質問には必須なのに…申し訳ありません

OSはXP日本語版でExcelは日本語版Office2000に含まれるものです。
現在VBA開発に使用しているxlsファイルは
Exciteの機械翻訳で出したものをコピペしてBOOKに張り付けてテストデータとして作成したものです

紹介していただいたリンク先を読むと、VBAではunicodeを標準ではサポートしていないようですね
(VBでは文字列関係の内部処理はUnicodeで処理されてるのに…変な気分…)
まあ、テストデータで使用している文章がUnicodeではなく単純に欧文ASCIIコードの文字列の可能性もあるので
Unicodeをサポートしていればうまく行くとは限らない気もしますが

でもちょっと手がかりをもらえたのでもう少し試行錯誤してみようかと思います。

646 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 07:04:27 ]
オーバーフローの意味もしらないのかVBA厨房は

647 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 11:29:01 ]
アクセスならともかく、エクセルでプリンタ設定いじるって難しいくね

648 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 14:59:26 ]
>>633
unionでいいんなら

Sub test()
Dim rg1 As Range, c As Integer
c = 8
Set rg1 = Intersect(Union(Selection, Selection).EntireRow, Columns(c))
Debug.Print WorksheetFunction.Subtotal(9, rg1)
End Sub



649 名前:デフォルトの名無しさん [2008/10/25(土) 15:46:42 ]
どなたかお教えください

マクロでたとえばですが

ActiveCell.Replace What:="*", Replacement:="x"

のように セル文字列の * の部分だけをxに変換したいのですが
アスタリスクはすべて変換してしまいますよね。

A1*A1 という文字列を上記マクロ実行するとA1xA1 という結果になって
ほしいのですが。実際は x 担ってしまいます

どのようにすればよいのでしょうか。


650 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 16:07:52 ]
>>649
ActiveCell.Replace What:="~*", Replacement:="x"

651 名前:デフォルトの名無しさん [2008/10/25(土) 16:09:39 ]
>>650

すごいですね。どうもです

652 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 17:06:03 ]
春先から悩んでた人多いな

653 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 18:11:57 ]
>>645
参考になるかも
ttp://codezine.jp/article/detail/1718



654 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 19:10:31 ]
しかし、エスケープシーケンスはもっとわかりやすくしてほしいよな。

655 名前:デフォルトの名無しさん [2008/10/26(日) 03:08:58 ]
教えてください
VBAで、明日が三週目の日曜日だった場合A1に○○と表示するってやりたいんでがどうやればいいですか?

656 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 03:24:14 ]
>>655
明日の日付はDate関数に+1すれば解る
特定の日付が日曜日か否かはWeekday関数で解る
3週目か否かは日を算術演算すれば解る
あとはそれらを条件に条件分岐してA1に値を代入すれば良い

この説明で解らなければ>>1★5なので、さようなら

657 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 03:44:51 ]
>>656
ありがとうございます。
算出演算ってのがよく解らないですががんばってみます。

658 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 06:05:51 ]
だからエクセルでやれよ



659 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 13:35:27 ]
だよな。数式でできるレベル

660 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 13:40:58 ]
 質問です。
 Excel2003を使っています。
 コマンドボックスをクリックするたびに、セルA1の数に1ずつ足していくマクロを作りたいのですが
どなたか教えていただけませんでしょうか。
 よろしくお願いします。


661 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 14:10:39 ]
ちょっとは自分で調べる努力した?

662 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 15:32:19 ]
>>660
コマンドボックスって何ぞや?

663 名前:660 mailto:sage [2008/10/26(日) 15:45:47 ]
 聞いておいて遅レスごめんなさい。
 コマンドボタンの間違いです。
 色々調べてみたのですが、変数の定義の仕方そのものがよく理解できていなくて

 わからないなりに考えたのが↓です

Sub test_Click()
Dim h As Long
h = Range("A1").Value
If h = 0 Then
h = 1
Else
h = h + 1
End If
End Sub

 もうちょっと頑張ってみます

664 名前:649 [2008/10/26(日) 15:48:36 ]
 お教え願いますか

 '=A1 という文字列を =A1 という数式に変換するマクロありますか。

同かよろしくお願いします。



665 名前:649 [2008/10/26(日) 15:50:36 ]
舌足らずでした

 あるセルに '=A1 という文字が書かれています。
マクロコマンド使って =A1 という数式に置換したいのですが。

どうかよろしくお願いします。




666 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 16:32:40 ]
>>663

cells(1,1).value = cells(1,1).value + 1

>>665

Cells(1, 1).Formula = Cells(1, 1).Value

667 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 16:33:34 ]
>>663
Range("A1").Value = Range("A1").Value + 1


668 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 16:43:51 ]
こんなばかみたいな質問にいちいち答えるなよ



669 名前:660 mailto:sage [2008/10/26(日) 16:47:26 ]
>>666
>>667

ありがとうございました。
一から勉強してきます。

670 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 17:06:11 ]
変数の定義ができないとか、
単純な代入式も書けないレベルの奴は入門書買え
いちいち他人の手を煩わすな

671 名前:デフォルトの名無しさん [2008/10/26(日) 22:22:34 ]
初めて質問させていただきます。
初心者ではないですが、レベルは低いですσ^^;

セルを指定するときに、Range("A1")ではなく[A1]というふうにやってるんですが、
これだとなにか悪影響がありますか?

今のところ困るのは、説明書やhelpの類がすべてRange形式のものばかりなので、
書き方が分からない時がある、ってことくらいです。

単に字数が少なくて済むからという理由で[**]形式にしているんですが、
ちょっと気になってます。
というか、そもそも気にしたほうがいいのか気にしなくてもいいのか・・・

672 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:45:34 ]
他の人が見たときに分かりにくいとか
少なくとも俺はわからん

673 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:19:11 ]
動作自体には問題ない
あとは使う場面やメンテナンス性などを考えて使えば良い
複数人で扱う物には使わない方がいいし、汎用モジュールも然り
個人専用の使い捨てマクロの類なら[A1]形式でも医員で内科医

連続しない複数セルもしくは範囲を扱う場合なんかは便利なので
俺も他人が弄る可能性のないものでは使うこともある
『 [A:A,C:C,E:F].ClearContents 』とか『 [A3,C3:F10,H3:H10] = 0 』とかね

因みにうちでは『r""』のキー打ちで『Range("")』が入力され、カーソルが""の間に移動するので
Range("A1")は、『 R " " A 1 』で済む為、[A1]でもRange("A1")でも入力字数は大差ない
俺の場合RangeよりCellsの方がよく使うが、Cellsも同じく入力省略出来るようにしてある

674 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:27:30 ]
簡単なマクロ程度をゴールにしてるならどんな形式でも良いけど、
本気で業務に使うプログラムやら、もっと高いゴールを目指すなら、
初心者のうちからcellsで指定する方が良いと思うよ。
rangeと言えば、あくまでrangeオブジェクトである訳で・・・。

何より変数絡めてセルの指定するようになると可読性が著しく下がる・・・。
タッチ数も増えるしで、良い事ない。

675 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:28:39 ]
最後の3行が言いたかっただけちゃうかー

676 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:36:52 ]


677 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 00:10:33 ]
[A1]なんて書き方知らなかった……。もっと精進するわ。

678 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 02:51:46 ]
>>671
結局は evaluate の省略記法だから、excel に渡して評価させる分、
多少処理の無駄があるんじゃないかと思う(たぶん)

[A1].value = 0
range("A1").value = 0
それぞれ10万回ループさせると数秒だが差が出る
evaluate("A1").value = 0
は、[A1]記法とほぼ同じになる

誤差レベルだけど、回数の多いループ内とか、速度が気になる場合は
避けた方がいいかもね



679 名前:デフォルトの名無しさん [2008/10/27(月) 09:49:00 ]
[A1]だと後ろにピリオド打っても入力候補が出てこねぇ。
Cells(1,1)も出てこねー。
Range("A1")だと出てくる。
どれもいったんRange型変数に入れりゃ同じだが。

680 名前:デフォルトの名無しさん [2008/10/27(月) 10:57:11 ]
pc11.2ch.net/test/read.cgi/gamedev/1217601153/
Syntax Error.しか知らないキチガイがあらわれました

681 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 11:57:01 ]
detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1220150877

大手ECサイトのヨドバシドットコムが、サイトリニューアルから大規模な障害を3日間続けているようです。
このようなケースではリニューアルを担当した業者はヨドバシカメラにどれほどの損害賠償を行うのでしょうか?

【ヨドバシカメラ】 ネットサイトをリニューアルしたら表示遅すぎでおわび [10/23]
gimpo.2ch.net/test/read.cgi/owabiplus/1224789237/

ヤマダ.com/ビックカメラ.com/ヨドバシ.comを語ろう
gimpo.2ch.net/test/read.cgi/kaden/1222787235/

【店員の質】ヨドバシカメラ総合17【落ちまくり】
gimpo.2ch.net/test/read.cgi/kaden/1215013408/

補足
どうやら今回のヨドバシドットコムリニューアルはCMS導入が目的で、
キノトロープスリーイントという会社( www.k-3int.co.jp/ )が請けたようです。

また、リニューアルの10/21から10/25現在までこの状況ですので、ヨドバシカメラの損失額は
億単位で発生していると言われています。

キノトロープってどうよ?PART4
namidame.2ch.net/test/read.cgi/venture/1224762171/

682 名前:633 [2008/10/27(月) 14:06:59 ]
>>648
おぉー、素晴らしい限りです!
アクティブシート以外に対してIntersectは無理なのでしょうか?

683 名前:682 [2008/10/27(月) 14:21:18 ]
失礼しました。orz
columns(c)を修飾したら出来ました。

684 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 16:04:05 ]
>>682
書いた後で気づいたんだが、それ union いらないっぽいw

? selection.address
$A$1:$A$5,$A$5:$A$10
? selection.entirerow.address
$1:$5,$5:$10
? intersect(selection.entirerow, columns(8)).address
$H$1:$H$10

intersect かけた時点で重複してる行はまとめられるから、
Set rg1 = Intersect(Selection.EntireRow, Columns(c))
だけでいいようだ

685 名前:682 mailto:sage [2008/10/27(月) 16:34:34 ]
>>684
究極のリファクタリング有難うございます。orz
こういうの教えられると、VBコードでゴリゴリ作るのが馬鹿らしくなってしまう...

686 名前:671 [2008/10/27(月) 22:41:20 ]
みなさんいろいろご意見ありがとうございました。
RangeやCells形式も使いこなせるように、もっと勉強していきます^^

687 名前:デフォルトの名無しさん [2008/10/28(火) 10:08:01 ]
もう1つ教えて下さい。

選択エリアの全行数は
For each r in Selection.Areas
rcnt = rcnt + r.Rows.Count
Next
で求めていますが、一気に知る方法がありますでしょうか?

688 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 18:29:27 ]
>>687
一気に知る方法は知らないがそのままだと重複している行もカウントされる
少し前で話題に出たIntersectを組み込んで
For Each r In Intersect(Selection.EntireRow, Selection.EntireRow).Areas
とかにしたほうがいいんじゃないか?



689 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 21:48:43 ]
初心者って「一気に」とか「1行で」とか好きだよな

690 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 22:14:07 ]
コードが長くなると理解できなくなるんだよw


691 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 23:47:58 ]
関数型プログラミングなら、一気にやるという書き方でも割と珍しくない感じがする。
もちろん面倒なことをやるなら1文あたりが相応に長くなるんだけど。

692 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 01:54:25 ]
学習が下手な奴ほど早く学習する事が1つだけある
それは「人に訊いた方がラクだ」という事だ
なんちてw

>>687
一般的なやり方じゃないかも知らんが一応これで行けそう

重複行込み
rcnt = selection.entirerow.cells.count / activesheet.columns.count
重複行抜き
rcnt = intersect(selection.entirerow,columns(1)).count

693 名前:デフォルトの名無しさん [2008/10/29(水) 02:45:55 ]
ループの中で =average() の引数を可変的に指定する方法を教えてください
具体例:
(1)乱数で10個のデータを生成し,列方向に保存
(2)保存したデータから平均を計算し, 2つ下のセルに出力
(3)上記(1)から(2) を n回繰り返す(とりあえずn=3).

上記(2)がうまく計算できません(下から3行目のコード).

---------------
Sub dice_siml01()
Cells.Clear

Dim i As Integer
Dim j As Integer
Dim n As Integer
Dim nobs As Integer

Cells(1, 1) = "試行回数"
n = 3
nobs = 10
For j = 1 To n
For i = 1 To nobs
Cells(i + 1, j + 1).Formula = "=randbetween(1,6)"
Next
Cells(nobs + 3, j + 1).Formula = "=Average(Range(Cells(2, j+1), Cells(2+nobs-1, j+1)))" Next
End Sub
---------------
【注】
randbetween(1,6) エラーの場合 rand()で置き換えてお願いします.

694 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 03:31:17 ]
>>693
.formula に入れるのはセルにそのまま打ち込める式
範囲指定のところが "B2:B11" とかの形式になるように、
文字列を生成すればOK

695 名前:デフォルトの名無しさん [2008/10/29(水) 09:46:54 ]
>>694
どうもありがと。
できれば、具体的な変換方法もお願いします。


696 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 10:03:37 ]
>>695
宿題か何か?
デカい誤り指摘してヒントも出したんだから、
そこからもっぺん自分で考えてみような
じゃなきゃこんな練習問題やってる意味ないだろ

697 名前:687 mailto:sage [2008/10/29(水) 10:09:55 ]
>>688
>>692
有難うございます。

「聞くは一時の恥じ...」
なんちてw

セル情報はExcelの基本関数知ってればコード記述で殆ど解決しちゃう
けど速度やメンテを考えるとコードは単純な程良い。


698 名前:デフォルトの名無しさん [2008/10/29(水) 10:36:40 ]
>>696
これ以上は分からん。



699 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 10:37:47 ]
>>697
あ、速度考えるなら intersect とか濫用しない方がいいよ
10万回ループさせると>>692より>>687の方が早いんで

700 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 12:16:46 ]
>>697
>けど速度やメンテを考えるとコードは単純な程良い。
これは少し間違ってる気がする
速度を考えるなら処理するデータを単純にした上でコードも単純なものにする
例えばセルのプロパティを変数に入れるとか
さらにメモリの使い方にも気を配れればいい
書くと短くても動かすと重たい処理なんてたくさんあるし

701 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 16:48:37 ]
コードの見た目(行数、文字数とか)が単純なのと、
実際の処理が単純なのは違うよね

あと>>699の自己フォローなんだけど、
selectionの状態に依存するわな、、、w
areasが2-3ぐらいなら>>687の方が早いってことで

702 名前:デフォルトの名無しさん [2008/10/29(水) 21:27:30 ]
置換に関しての質問なのですが、

検索した2つ右のセルの文字の最後に1をつけたい場合どうすればいいでしょうか?

703 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:39:33 ]
hoge = "あくまで一例"
set piyo = cells.find(hoge).offset(0,2)
piyo.value = piyo.value & "1"


704 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:57:52 ]
【1 OSの種類         .】 WindowsXP
【2 Excelのバージョン   】 Excel2007
【3 VBAが使えるか    .】 超初心者です
【4 VBAでの回答の可否】 VBAでお願いします。

行の挿入、削除を教えてください。

A B A B C A B C
1 1001 1001 1 1001 1001 1001 1 1001 1001 1001
2 1003 1003 2 1003 1003 1002 2 1002
3 1004 1004 3 1004 1004 1003 3 1003 1003 1003
4 1005 1005 → 4 1005 1005 1004 → 4 1004 1004 1004
5 1006 1006 5 1006 1006 1006 5 1006 1006 1006
6 1007 1007 6 1007 1007 1007 6 1007 1007 1007
7 1008 1008 7 1008 1008 1008 7 1008 1008 1008


@ AB列の数字は同じものが入っています。
A C列に数値が入ります。
B C列に合わせて、A列、B列を挿入、削除したいです。
  C列には1002がありますが、A,B列には1002が無いため、A,B列に行の挿入が行われ、次にC列に1005が無いため、A,B列の1005は
  行の削除がされると言う具合です。

業務の効率化を図りたいので、申し訳ございませんがどなたか宜しくお願いいたします。


705 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 22:01:22 ]
丸投げはやめようぜ。

自分で作ってみたけど、分からない所が出てきた。とかなら全然かまわないんだけど。
作成依頼所じゃないんで。

706 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 22:03:28 ]
すいません、数値がずれまくりました。
もう一度書き込ませてください。

【1 OSの種類         .】 WindowsXP
【2 Excelのバージョン   】 Excel2007
【3 VBAが使えるか    .】 超初心者です
【4 VBAでの回答の可否】 VBAでお願いします。

行の挿入、削除を教えてください。

@            A                 B    
    A    B         A    B    C        A    B    C
1  1001  1001     1  1001  1001  1001    1  1001  1001  1001
2  1003  1003     2  1003  1003  1002    2  1002
3  1004  1004     3  1004  1004  1003    3  1003  1003  1003
4  1005  1005  →  4  1005  1005  1004  → 4  1004  1004  1004
5  1006  1006     5  1006  1006  1006    5  1006  1006  1006
6  1007  1007     6  1007  1007  1007    6  1007  1007  1007
7  1008  1008     7  1008  1008  1008    7  1008  1008  1008


@ AB列の数字は同じものが入っています。
A C列に数値が入ります。
B C列に合わせて、A列、B列を挿入、削除したいです。
  C列には1002がありますが、A,B列には1002が無いため、A,B列に行の挿入が行われ、次にC列に1005が無いため、A,B列の1005は
  行の削除がされると言う具合です。

業務の効率化を図りたいので、申し訳ございませんがどなたか宜しくお願いいたします。


707 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 22:05:26 ]
>>706
>705

708 名前:デフォルトの名無しさん [2008/10/29(水) 22:22:44 ]
>>703さん

ありがとうございます!!

A列全部で検索かけたい場合どうすればいいでしょうか?



709 名前:704 706 mailto:sage [2008/10/29(水) 22:27:40 ]
申し訳ございませんでした。

EXCEL総合相談所で聞いてきます。
マルチになってしまいますが、ご了承ください。

レベルが上がったらこのスレに来たいと思います。


710 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 12:42:39 ]
>>708
2003だとFindのヘルプにちょうどいい例が載ってるんだが2007では載ってないのか?

711 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 12:45:03 ]
他のレスと混同してた・・・


712 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 21:03:32 ]
>>708
cells はセル全部
columns(1) は1列目

ヒントはここまで。

713 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 03:25:08 ]
>>706
ズリネタとして結構面白かった

714 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 18:00:44 ]
dim rg as range
rg=activecell
処理
この処理後に、元のアクティブセルに戻る文が書けません。
どんなだったか、教えて。


715 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 18:07:50 ]
もう一個、よろしく。
処理の中で範囲を指定してコピー、貼付をしている。
application.screenupdating=false を直前に入れても
画面が動くのですが、画面が動かないようにできませんか?


716 名前:y mailto:sage [2008/11/02(日) 18:36:29 ]
>>714
rg.Parent.Activate
rg.Avtivate
ついでに言うと、>714の2行目は構文ミスでエラーになるので修正が必要です。

>>715
CopyメソッドのDestinationプロパティに貼り付け先範囲を指定して、
一度にコピー・貼り付けを行うと、動く枠線が出ないようになります。



717 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 19:37:54 ]
>>716
久しぶりなので、マクロの記録で、終わってましたorz
おかげで、思い出すことが出来ました。
サンクス。

718 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 20:51:29 ]
>>716
その2行目も・・・



719 名前:デフォルトの名無しさん [2008/11/02(日) 20:57:01 ]
プログラム用のVBAコードを記述した非表示ブックから、データ用の任意のブック
を開き、データブックのイベントに対する処理をしています。
Excel2007はウインドウのタイトル右端の×ボタンが「閉じる」に対応している様
です。
Excel2007でも以前のバージョンと同様に「Excelの終了」にする方法を模索中です。
方法をご教授頂けると有難いです。

720 名前:y mailto:sage [2008/11/02(日) 22:45:44 ]
>>718
うは ご指摘ありがとうございます。

>>719
×ボタンでBeforeCloseイベントが発生するので、
同イベントプロシージャ内に
Application.Quit
を記述します。


721 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 23:00:30 ]
range型変数にsetしてないってのは突っ込んじゃいけない所?
最近、微妙な空気が読めなくなってきたよ・・・。

722 名前:719 [2008/11/02(日) 23:24:17 ]
>>720
自分もそれでExcelが終了すると思っていたのですが、ブックが閉じるだけです。

SnendKeys(Alt+F4)を試したら終了できました。orz

723 名前:719 [2008/11/03(月) 00:23:33 ]
訂正です。
SendKeys(Alt+F4)でもだめでした。

プログラムブック(A)からデータブック(B)を開いて、Bが変更された場合に
変更を保存するかどうかを確認するダイアログが表示されるので、Alt+F4
を送信するとダイアログが閉じられる事になるのでExcelを終了できません。

724 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 00:25:16 ]
>>722
application.quit の前にワークブックの close やってる?
後にしてみたらどうなる?2007はわからんけど、、、

725 名前:722 [2008/11/03(月) 00:44:26 ]
>>724
もう少し具体的に教えて下さいませんか。

2007以外は×ボタンでExcel終了が終了するようになっています。
同じブックを2007の互換モードで動かして×ボタンでExcelを終了
したいのです。
この方法が分からないのです。

726 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 01:21:12 ]
>>725
あ、ごめん
ttp://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_800_060.html
この辺の問題のことだったの。
2007以外ではいけてるなら関係ないね。失礼した

727 名前:y mailto:sage [2008/11/03(月) 07:57:50 ]
>>725
2007で試さずに>720を答えてました。2007ではQuitだとうまくいかないんですね?
一応、Shift を押しながら×クリックすれば一発で終了するので、それで用が済むなら。
VBAでのやり方は、後で職場の2007で探してみます。


728 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 09:09:42 ]
range型ってsetしなくても使えるの?



729 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 10:14:59 ]
範囲指定をしてコピー等をした後、コピーモードををフォルスにした
後のことです。
範囲指定を解除する方法は、どこかのセルをactivateやselectするしか
方法はありませんか。画面のちらつきを少しでも防止したいので、セル指定を
したくないのですが、何か方法が無いでしょうか?



730 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 10:51:57 ]
久々にExcelのVBA触って改めて思ったけど、本当にVBAっていうかVBって糞言語だな。

>>725
724は具体的に言ってるでしょ。
ダイアログが出るために終了できないのならダイアログが出ないようにすれば?
どうしてダイアログが出るの?
ブックが変更されてるのに保存されてないからでしょ?
だったら保存したら?
こんなのパソコン初めて一週間のオッサンでも最初に覚えることの一つじゃないか。

>>729
全体的に何がいいたいのかよくわからない気がする。






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

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

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