
No.7ベストアンサー
- 回答日時:
こんばんは。
Wendy02です。ちょうど、今日は、たまたま、いろんなことを考えていた矢先でした。
私が、特別な入力を覚えたとき、結構、重い病気で、入院して時間が空いてしまって、できるかできないかわからないけれど、まあ、やってみるとか、覚えたこととか、仕事が、閑職になってしまった時とかも、そうでした。
そういえば、人生の節目で、技術的なことは、習得しているなぁ、なんて思いました。
入院中は、あまりいろんなことを考えずに、お体が許せる限り、一心に、何か別なことをおやりになってみるのもよいかと思います。ある意味では、絶好のチャンスかもしれません。それと、ちょうど、本日、別の場所で書きましたが、私のパソコンの覚え方は、イメージ優先なんです。実際に、PCに向かわなくても、イメージさえもてれば、いろんなことが覚えられます。
最後に、遠藤周作さんが、昔、病気の人は、病気の人の人生がある、と言っていました。決して、健康体の人に対するハンディではない、というようなことを本で書いていました。
気長に、養生をなさってください。またよろしくお願いします。
Wendy02 様
お久しぶりです。
とても良いお言葉を頂いていたのにもかかわらず、
返信が出来ておらず、大変失礼致しました。
会社で作成中のマクロを用いたエクセルのデータは
中止してしまいました。
まだ会社へは復帰しておらず、入退院の繰り返す日々です。
(来年2月には仕事復帰できるかもしれません)
視野が欠損していたためパソコンを見るのも大変だったの
ですが、今は大分回復しました。
病気に対しては、ひとつの経験としてプラスに考える
ように心がけております。
人には運命があるし、こういった逆境も私なら耐えられる
からこそ与えられた運命なのだと思います。(宗教チック?)
しかし、イメージでのPCを覚えるというのはすごいですね!
確かに何をやるにもイメージはとても大事なことだと思います。
私もイメージでPCを覚えることのできる領域になれるといいです。
こんな私にお気遣いの言葉をいただきまして、
ありがとうございました。
また機会があった際にはよろしくお願い致します。
No.6
- 回答日時:
こんにちは。
Wendy02です。お礼を付けてありがとうございます。
>Set rng = Range("A1", Range("A60000").End(xlUp))
> というところを
>Set rng = Range("N1", Range("N60000").End(xlUp))
> と変えたところ動きました。
データの量をN列で取るのですね。
なお、
>'65536行目まで取ると、エラーになる場合があります。
> Set rng = Range("A1", Range("A60000").End(xlUp))
というのは、配列をワークシート関数に入れるとき、列の行数をフルに入れるとエラーになることがあると理由からです。
それと、前回の
#理由を教わっても無駄だと思います。それを自分で気がつくことが大事です。
今、読むと、なんと、私は偉そうなことを書いてしまったなって思います。大変にすみません。
今は、過渡期で、その問題集なんかも、役に立たなくなるときは、そんなに遠くなさそうです。作者さんも、それについては顧みていないようですし、内容的に少し古いのです。
結局、先のことをみて、進んでいくしかありませんからね。私は、いつまでついて行けるか分かりません。私は、Windows になって、もうダメだと、一度は、もう諦めた人です。
VBA関連の書籍は、お持ちですか?一部のExcel VBAの上級の本は、もうそろそろ絶版になっていく可能性が強いです。ここ数年で、VB6を含めて、名著と呼ばれる本が、ずいぶん、絶版になっています。その割りに、新しいものが出ていません。
新製品側のVBAは、もう、そんなに長い間続くとは思えませんが、Excel 97 を始め、多くの 旧Office 製品が、これからかなり長い間使われていくと思います。不況が長いせいで、こうした新バージョンのソフトウェアの導入をためらう企業が多いようです。また、新製品の必要性もそれほど感じられません。私個人、Office 2007のコンセプトを受け入れて使いこなすには、ややこしすぎます。誰でも、というわけにはいかないと思います。
だいぶ時間があきました。
VBAの書籍は初歩的なものをひとつ持ってます。
しかし、今重い病気にかかり、入院療養中でいったん休憩しております。結構重いのでしんどいです・・・。
院内から書き込み中です。
いろいろお教えいただきましたが、またお会いできたらそのときよろしくお願い致します。
No.5
- 回答日時:
こんにちは。
Wend02です。元の質問から離れてしまうかもしれませんが、一応、ここが開いていて、レスが付く限りは、コメントさせていただきます。(クレームが付くかもしれませんが)
>マクロは色々な書き方があるようで、作者によってかなりちがうようですね。
同じようなコーディング・ルールを持った人は、コードは、全体的に同じ雰囲気を持っています。一概には言えませんが、プログラミングって、相手への思いやりも反映すると思います。
>一番動作が速く、シンプルで、わかりやすいものが素人の私には好ましく思います。しかし、バージョンによって書き方が変わるのも一苦労ですね・・・
私もその通りだと思います。あまり、神経質にコードを書いても、読みにくくします。適材適所ですが、上達にしたがって、細かい部分で気を抜けないところが出てきます。
もし、バージョン違いで問題が発生したら、掲示板(できれば専門掲示板)で質問すれば、必ず回答してくれる人がいます。その違いの資料とか、なかなか見つけにくいし、自分で何もかも把握するのは困難ですからね。正しくコーディングすれば、根本的な問題は起こらないと思います。しかし、過去は過去のものとして、下位バージョンの問題は、いずれ淘汰される、と考えて、前に進んでいくしかないと思います。
なお、以下の問題が解ければ、一応、私の話は、見えるようになると思います。最初、どれひとつとして、さっぱり手が付きません。
この問題集は、いくつかのVBAのルールを私に教えてくれました。
http://hp.vector.co.jp/authors/VA016119/excel/te …
Excel VBA テスト2(ベータ版)
作者:芳坂 和行氏
「正しい/誤り」の理由が言えなければ、ダメです。
この解答は、ほとんど、「誤り」です。
理由を教わっても無駄だと思います。それを自分で気がつくことが大事です。これは、Yes/No では割り切れないものが入っています。だから、その解答の理由が書いていないのだと思います。
よろしかったら。
多くのご回答ありがとうございました。
問題集も見てみましたが、やはりさっぱりわかりません。
が、一つ一つ見て行きたいと思います。
2000以下のバージョンもためしてみました。
動かなかったので一部変更したらできました。
Set rng = Range("A1", Range("A60000").End(xlUp))
というところを
Set rng = Range("N1", Range("N60000").End(xlUp))
と変えたところ動きました。
色々とお教えいただきましてありがとうございました。
また、機会がありました時お答えいただけると幸いです。
No.4
- 回答日時:
こんばんは。
Wendy02です。補足というか、混乱させる目的ではありませんが、ここの掲示板で、かなりVBAのできる方がいらっしゃいますが、その方が、別の書き方をしています。実は、私は、この問題は、一応、自分の中では結論はついているのですが、ただ、多少、それをつつかれると痛いなっていう感じなので、先に書いておきます。
'---------------------------------------------------------
'前回書いた私のコード:
ActiveSheet.ScrollArea = "A" & c.Row & ":N" & c.Row + 100
'---------------------------------------------------------
'その方が書くだろうコード:
ActiveSheet.ScrollArea = "A" & CStr(c.Row) & ":N" & CStr(c.Row + 100)
'CStr は、文字列に変換する関数
'---------------------------------------------------------
文字は文字、数値は数値で、コードの中で自動的に型の変換(キャスト)を認めないという考え方です。理屈からすると、後者のほうが正しいのです。このモードは、VBAにはありませんが、Strict On という設定で、次期VBA(VSTA-Excel2007にはありません)では、いずれ選択肢としてあるかもしれません。
もし、本当に、データ型をきちんと把握していれば、予想外のエラーなどは少なくなるのですが、なかなか、それは、面倒な作業になるかもしれません。
ご回答ありがとうございます。
また、お礼も遅くなり申し訳ありません。
少々忙しく、大変失礼しております。
マクロは色々な書き方があるようで、作者によってかなりちがうようですね。
一番動作が速く、シンプルで、わかりやすいものが素人の私には好ましく思います。しかし、バージョンによって書き方が変わるのも一苦労ですね・・・
さて、お教え頂きました通り、さっそく動作の確認をしたところ異常なくうごきました。
データ型は気になるところです。 単純に+100とやっても、動かない時、そこへ(+100)と括弧をつけると動いたりするように、
おくの深さを感じます。
(ちょっと意味が違うかも・・・)
No.3
- 回答日時:
こんばんは。
Wendy02です。>アンダーバーで行が終わるのは何ででしょうか。
Set c = ActiveSheet.Range("A:A").Find( What:=dt, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext)
途中で、改行をさせても、ひとつのまとまりの行を続けさせるためです。
これは、コードを見易くさせるために、このような方法を取っています。ただし、誰も見せる必要がなければ、このようなことは必要ありません。名前付き引数(例;What:=)さえ必要ありません。
ただし、Findメソッドは、マクロの教本などでは、あまり長く書かれていないことが多いのですが、また、Findメソッドは、実務では、引数を省略すると、ワークシートの操作で入力したものが、そのまま、デフォルトとして操作をしてしまうので、なるべく、きちんと、書いたほうがよいです。
なお、私は、この分かち書きした定型文を、VBEditorにショートカットで登録して、すぐに出せるようにしてあります。
>setはセットするということでしょうか。
これは、VBA/VB6 のオブジェクト変数に、オブジェクトの戻り値を代入するための基本的な操作です。
Set は、英語の「配置させる」とか「位置させる」という意味ではなく、あくまでも、独特なVBA/VBの用法のひとつです。なお、VB.Net では、この方法はなくなります。
例えば、A1 に、「12」 と入れて、
Set rng = Range("A1")
Msgbox rng
v = Range("A1")
Msgbox v
どちらも、結果は同じです。
ところが、
Set rng = Range("A1")
Msgbox rng.NumberFormatLocal
設定された書式が出てくるはずです。つまり、rng は、値だけではなく、書式やさまざまな値(プロパティ)が含まれています。
v = Range("A1")
Msgbox v
これは、VBAが、暗黙的に、値を返すように作られています。
ただし、これは、Office の VBAとして使う時のみ可能だ、と解釈したほうがよいようです。
>Dimがすごく使われているため、理解にくるしみます。
私は、入門レベルでは、通常は、Dim の型の宣言がなくてもよいと思っています。
Dim は、そのコーディングの理解度に依存しています。数値が入るのに、なぜ、Variant 型だとか、それは、なかなか理解しにくいところだと思います。私自身、良く見えていないことがありましたね。自分で作ってみると、失敗するのですが、なぜ失敗(エラー)しているのか、しばらく気が付かないことがありました。
掲示板で公開する場合、相手の人は、Option Explicit で、型の宣言の強制をしていると想定したほうがよいので、Dim等の型の宣言がないというわけにはいかないのです。
この回答への補足
ご回答ありがとうございます。
お礼が遅くなりました。
アンダーバーにそのような意味があったんですね。
何もしらなくて、申し訳ありません。
メッセージボックスに値等を返すコードが2行程で出来ることなのかと、少し頭がすっきりした感じがします。
今後もちょこちょこ、改変していきたいと思います。
下位バージョンについては、まだしっかりと目を通せていないため、
再度お聞きしたい点がありました際には、お願いできれば幸いです。
No.2
- 回答日時:
こんにちは。
Wendy02です。回答に対する補足 で、コードの意味が少し分からない部分がありますが、もしかしたら、このようなことかもしれないと思い、作ってみました。
日付を探してスクロール範囲を決める方法のコードです。
以下をご覧になって分かるかと思いますが、XL2002以上とXL2000とのコードの違いがあります。これは、下位バージョンは、バグが存在すると思ってよいと考えてもよいかと思います。下位バージョンのコードは、XL2003まで稼動しますが、上位バージョンのコードは、XL2000では、うまく行かないことがあると思います。
どちらかというと、下位バージョンの書き方は、現在では、書法ルール違反という感じです。
どちらも、表示テキストに対して検索します。
ただし、これは、私の解釈している書き方ですから、必ずしも、一般的だとは言えません。
なお、検索列は、下位バージョン用は、1列のみで、2列は検索できません。
'--------------------------------------------------------------
Sub SettingArea()
'XL2002 以上(XL2000以下は、うまくいかない可能性が強い)
Dim dt As Variant
Dim c As Range
dt = Application.InputBox("選択したい日付を入力して下さい。" & _
vbCrLf & vbCrLf & " 例) 1/ 23→ 23", "日付指定", Type:=2)
If dt = "" Or VarType(dt) = vbBoolean Then Exit Sub
Set c = ActiveSheet.Range("A:A").Find( _
What:=dt, _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlNext)
If Not c Is Nothing Then
c.Select
ActiveSheet.ScrollArea = "A" & c.Row & ":N" & c.Row + 100
ActiveWindow.ScrollRow = c.Row
Else
MsgBox "指示された日にちは存在しません。", vbCritical
End If
End Sub
'-------------------------------------------------------------
Sub SettingArea_2K()
'XL97以上-XL2000以下
Dim rng As Range
Dim Dates As Variant
Dim dt As Variant
Dim c As Variant
Dim k As Long
Dim i As Variant
dt = Application.InputBox("選択したい日付を入力して下さい。" & _
vbCrLf & vbCrLf & " 例) 1/ 23→ 23", "日付指定", Type:=2)
If dt = "" Or VarType(dt) = vbBoolean Then Exit Sub
'65536行目まで取ると、エラーになる場合があります。
Set rng = Range("A1", Range("A60000").End(xlUp))
ReDim Dates(0 To rng.Count -1)
For Each c In rng
Dates(k) = c.Text '一次元配列の作成
k = k + 1
Next
'XL97の書法
'日付のみの検索ですから、同じ日付があれば、最初のものがヒットします。
i = Application.Match(dt, Dates, 0)
If Not IsError(i) Then
rng.Cells(i).Select
ActiveSheet.ScrollArea = "A" & rng.Cells(i).Row & ":N" & _
rng.Cells(i).Row + 100
ActiveWindow.ScrollRow = rng.Cells(i).Row
Else
MsgBox "指示された日にちは存在しません。", vbCritical
End If
Set rng = Nothing
End Sub
この回答への補足
こんばんは、今回もきれいにして頂いてありがとうございます。
ちゃんとそのセルへスクロールするようにもしていただいて、
それを直しているところでした。
下位バージョンはとてもごちゃごちゃしてしまうんですね。
Dimがすごく使われているため、理解にくるしみます。
下位はとりあえず置いておいて、上位バージョンの中でわからないものがあったため、
よろしければ解説をしていただけないでしょうか。
アンダーバーで行が終わるのは何ででしょうか。
setはセットするということでしょうか。
Set c = ActiveSheet.Range("A:A").Find( _
What:=dt, _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlNext)
No.1
- 回答日時:
こんばんは。
Sheets(2)
という意味は、Sheets の2番目という意味です。誤動作することがありますから、用いないほうがよいと思います。もちろん、重箱の隅をつつく人がいれば、私のもダメ出しするのでしょうけれど、その対処法、別途トラブルが起こったら、お答えします。
Sub ScrollAreaSetting()
Dim i As Integer
With Worksheets("Sheet2")
i = .Range("A1").Value
If i > 0 Then
.ScrollArea = "A" & i & ": N" & i + 100
End If
End With
End Sub
この回答への補足
またまたご回答ありがとうございます。
お蔭様で出来ました。
Sheets(2)の誤作動の件、ありがとうございます。
今回のものは、前回教え頂いたものにミックスしようと考えているものでした。ミックスした結果、
Sub sample()
Dim h As Integer
Dim i As Variant
h = Application.ExecuteExcel4Macro("GET.DOCUMENT(50)")
i = Application.InputBox("選択したい日付を入力して下さい。" & vbCrLf & vbCrLf & " 例) 1/ 23→ 23", "日付指定", Type:=2)
If i = "" Or VarType(i) = vbBoolean Then Exit Sub
If i <= h Then
ScrollArea = "A" & i & ":N" & i + 100
Else
MsgBox "指示された日にちは存在しません。", vbCritical
End If
End Sub
このようになりました。すべてWendy02さんに作ってもらったみたいですが、ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) VBAについて教えてください 4 2022/11/10 12:44
- Excel(エクセル) エクセルVBA、ファイル名をセルの値で保存の方法を教えてください。 おそれいります。こちらで数々のエ 6 2023/06/30 22:17
- Visual Basic(VBA) Sheet1のA列にコードB列にメアド、Sheet2のB列にコード一覧とD列にメアド一覧があり、Sh 3 2022/10/19 11:57
- Visual Basic(VBA) VBA 配列を使ったコードに直していただけますか 4 2023/05/06 15:18
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Excel(エクセル) VBA カゥントで数値の範囲を規制 1 2022/05/20 06:20
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
旦那さんの精子がしょっぱいの...
-
高校生男です。ズボンのもっこ...
-
精子を飲んでみたいです 中2の...
-
病気の方にお守りは非常識ですか?
-
処女膜について
-
左脇腹、みぞおちの痛み
-
調理中に、生肉に触れた手であ...
-
病気の方へ書類を送付する際の...
-
彼氏と性行為をする時、指一本...
-
同じ症状で別の病院にかかったら?
-
妻の家事能力が極端に低いこと...
-
冷凍のシーフードミックスを生...
-
ひび割れた卵、食べてしまいま...
-
耳の後ろのしこり
-
腕に赤い斑点が大量発生してま...
-
3日前に唇が腫れ出して、今下唇...
-
腹痛が酷く午後仕事を早退した...
-
どんどん痩せていきます。 変わ...
-
胃腸炎の友達へのお見舞い 友達...
-
最近手がすべって、物を落とす...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
旦那さんの精子がしょっぱいの...
-
精子を飲んでみたいです 中2の...
-
病気の方にお守りは非常識ですか?
-
左脇腹、みぞおちの痛み
-
高校生男です。ズボンのもっこ...
-
病気の方へ書類を送付する際の...
-
左手が、痺れる
-
同じ症状で別の病院にかかったら?
-
調理中に、生肉に触れた手であ...
-
夫の性癖に困っています。31歳...
-
処女膜について
-
耳の後ろのしこり
-
彼氏と性行為をする時、指一本...
-
妻の家事能力が極端に低いこと...
-
昨日から義姉夫婦が泊まりにき...
-
ヘバーデン結節
-
教えて下さい!耳の後ろにしこり
-
36.7度の微熱と喉の痛み・...
-
腕に赤い斑点が大量発生してま...
-
ひび割れた卵、食べてしまいま...
おすすめ情報