選択範囲内(縦一列)で同じ値が入力されたセルの色を黄色にするプログラムを作りました。

Sub 選択範囲内で同じ値が入力されたセルを調べる_縦()

Dim startrow As Byte
Dim lasrow As Byte
Dim i As Long
Dim j As Byte
Dim atai

If TypeName(Selection) <> "Range" Then Exit Sub

startrow = ActiveCell.Row '最初のセルの列番号を取得
lasrow = Selection.Rows(Selection.Rows.Count).Row '最終列番号を取得

'同じ値が入力されているセルを黄色にする
For i = startrow To lasrow - 1
If ActiveSheet.Cells(i, ActiveCell.Column).Interior.ColorIndex = xlNone Then
atai = ActiveSheet.Cells(i, ActiveCell.Column).Value
For j = i + 1 To lasrow
If atai = ActiveSheet.Cells(j, ActiveCell.Column).Value Then
ActiveSheet.Cells(i, ActiveCell.Column).Interior.ColorIndex = 6
ActiveSheet.Cells(j, ActiveCell.Column).Interior.ColorIndex = 6
End If
Next
End If
Next

End Sub


但し、上記のプログラムでは選択範囲内に結合セルがあるとエラーになってしまいます。
どなたか、解決方法をご教授頂けませんでしょうか?
宜しくお願い致しますm(._.)m

このQ&Aに関連する最新のQ&A

A 回答 (2件)

こんな感じ?



Sub 選択範囲内で同じ値が入力されたセルを調べる_縦()
Dim i As Long
Dim j As Long
If TypeName(Selection) <> "Range" Then Exit Sub
For i = 1 To Selection.Count - 1
For j = Selection.Count To i + 1 Step -1
'同じ値が入力されているセルを黄色にする
If Selection(i).Value = "" Then Exit For
If Selection(i).Value = Selection(j).Value Then
Selection(i).Interior.ColorIndex = 6
Selection(j).Interior.ColorIndex = 6
End If
Next j
Next i
End Sub
    • good
    • 0
この回答へのお礼

hige_082さん、ありがとうございます。
すごい、こんな簡潔なコードで可能だったんですね!
selection(i)という使い方、iやjの設定方法など、とても勉強になりました。ありがとうございましたm(._.)m

お礼日時:2009/05/19 13:27

よくわかんないけど、対象が選択範囲で、その中にActiveCellと同じ値があれば黄色にするということでいいのでしょうか?



こんな感じ?
Sub test()
Dim rng As Range, c As Range, v

If TypeName(Selection) <> "Range" Then Exit Sub
Set rng = Selection
v = ActiveCell.Value
For Each c In rng
 If c.Interior.ColorIndex = 6 Then c.Interior.ColorIndex = xlNone
 If c.Value = v Then c.Interior.ColorIndex = 6
Next c
End Sub
    • good
    • 0
この回答へのお礼

fujillinさん、ありがとうございます。

例えばA1からA100までデータが入力されていて、それらの値はすべて違うものであるはず → 同じ値があれば入力ミスなので、それをチェックしたい。というのが目的です。

A1からA100までを選択している状態でプログラムを実行し、A17とA69の値が同じであれば、両方のセルの色を黄色にしたいのです。

説明が下手で申し訳ありません。宜しくお願い致します。

お礼日時:2009/05/18 16:21

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q英語の偏差値を上げるには

こんにちは。高1女子です。
私の学校では、1年から河合模試を受けます。
国語は得意なので、第1回目の偏差値は73、2回目は76、と、それなりに良い成績を取れています。
しかし、英語は55程度しかありません。英語のせいで、国英の偏差値がとても低くなっていて悔しいです。
文系志望なので、英語の偏差値を上げたいです。
どうしたら英語の偏差値を上げることができるのでしょうか?
普段からの勉強法や、模試の対策など、教えていただけると嬉しいです。
よろしくお願いします。

Aベストアンサー

ズバリ答えます。

単語を覚えるよりも長文問題や文法を徹底的にこなす事が得策だと思います。あとは国立か私立志願かわかりませんが、英文解釈と英語構文を徹底的にする事がお勧めです。

単語を覚えたとしても無数にあるので、大学の受験問題を作るサイドで言えば

それよりも文法と構文が大切なんです!!英語の勉強で言えば骨格にあたるものなんです!骨格を太くすることで次は語法や語彙等を徹底的に覚える。これが英語の近道です。骨を太くする事が英語です。国語の場合は古典は暗記で済みますが、英語は暗記が出来ないのです!!

覚えた単語が試験に出る確率は低いのです。逆に文法問題や英文解釈問題、英作文問題が出やすいのです。

対策ですが、早い段階で予備校(できれば河合塾か駿台)、通信教育で言えばZ会、進研ゼミをするのがお勧め。英語で言えばZ会・河合出版・駿台文庫で文法問題や長文問題の本をじっくり解く事をお勧めします!!!

あと模試の偏差値もそうですが、どこが間違えたのかをじっくり見てくださいね。

QIf myCityBUNRUINO = 2 Then Cells(myPrefNO + 3 - 47 - myCityNu, 24) = myTantou こちらについて教えていただきたいです。

myTorikomibi = Range("A2").Value
If myCityBUNRUINO = 0 Then Cells(myPrefNO + 3, 4) = myTantou
If myCityBUNRUINO = 1 Then Cells(myPrefNO + 3 - 47, 14) = myTantou
If myCityBUNRUINO = 2 Then Cells(myPrefNO + 3 - 47 - myCityNu, 24) = myTantou
For i = 1 To 3
If myCityBUNRUINO = 0 Then Cells(myPrefNO + 3, i + 4) = myTorikomibi
If myCityBUNRUINO = 1 Then Cells(myPrefNO + 3 - 47, i + 14) = myTorikomibi
If myCityBUNRUINO = 2 Then Cells(myPrefNO + 3 - 47 - myCityNu, i + 24) = myTorikomibi
Next i
マクロを編集しようとしましたところこちらが解読できづに困っています。
こちらだけとりだして実行しながら解読していますが混乱してしまっています。ご存知の方いらっしゃいましたら教えてください。Then以降がわかりません。よろしくお願いいたします。

myTorikomibi = Range("A2").Value
If myCityBUNRUINO = 0 Then Cells(myPrefNO + 3, 4) = myTantou
If myCityBUNRUINO = 1 Then Cells(myPrefNO + 3 - 47, 14) = myTantou
If myCityBUNRUINO = 2 Then Cells(myPrefNO + 3 - 47 - myCityNu, 24) = myTantou
For i = 1 To 3
If myCityBUNRUINO = 0 Then Cells(myPrefNO + 3, i + 4) = myTorikomibi
If myCityBUNRUINO = 1 Then Cells(myPrefNO + 3 - 47, i + 14) = myTorikomibi
If myCityBUNRUINO = 2 Then Cells...続きを読む

Aベストアンサー

こんにちは。maruru01です。

ヘルプはご覧になりましたか?
特に、Cellsについて。
Cellsは、

Cells(行番号, 列番号)

で、セルを参照します。
なので、各条件の時に、変数「myTantou」や「myTorikomibi」に格納されている値をそれらのセルに代入しているだけですが。
ただし、行番号が、

「myPrefNO + 3 - 47」
「myPrefNO + 3 - 47 - myCityNu」

などとちょっとややこしくなっていますが。
これも、変数「myPrefNO」「myCityNu」に入っている値から行番号が決まるというだけです。
例えば、
myPrefNO=60
myCityNu=2
なら、下の例は、
60+3-47-2=14
で、14行目となるということです。

Q「白黒二値」、英語は?

画像を白黒二値化しました。英語で説明をしなければならないのですが、画像の「白黒二値」、「白黒二値化」などの英語の表現法をお教えください。名詞形、動詞形などお教え頂けましたら助かります。よろしくお願いします。

Aベストアンサー

あっているのかどうかわからんが。
http://en.wikipedia.org/wiki/Grayscale
経由で以下の情報にたどり着いた。
http://en.wikipedia.org/wiki/Binary_image

QExcelVBAでCells(Row,Column)を使用してセルの範囲を指定する方法

Excelのプログラムで例えば、セル「A」から「F」までの範囲の場合、

Range("A:F")

セル「A1」から「F3」の場合、

Range("A1:F3")

となりますが、これをCells(Row,Column)を使用した方法はあるでしょうか?
回答よろしくお願いします。

Aベストアンサー

>Range("A1:F3")

これを、Cells(Row,Column)のみで表すことはできません。
同じRangeプロパティを使って

Range( Cells(1,1), Cells(3,6) )

Range( Cells(1,"A"), Cells(3,"F") )

Row1 = 1 :Clm1 = 1
Row2 = 3 :Clm2 = 6
Range( Cells(Row1,Clm1), Cells(Row2,Clm2) )

見れば分かると思いますが、
Cells(Row,Column)では、ひとつのセルしか指定できない、
即ちRangeプロパティみたいに範囲指定は出来ないということです。


ところで、
ComboBoxの▲云々の質問が削除されてませんか?
夜にでも回答しようかと思っていたのですが。(^^;;;
自己解決したのでしょうね。たぶん。
 

Q英語で偏差値80を目指すには・・・

現在高2です。英語の偏差値(進研模試)で70前後なのですが、偏差値80あたりをとるにはどのような勉強をすればよいのでしょうか。国立の二次試験(後期)は英語だけなので、いまの偏差値だとぎりぎりです。

Aベストアンサー

偏差値70-80レベルになると大部分の問題は答えられるレベルであとほんの少しわからないものがある状態だと思います。

したがって,自分の苦手な問題は何か良く解析してその部分を徹底的に勉強するしかないと思います。

Qマクロで100マス計算! Dim i,j As Integer For i = 2 ToRang

マクロで100マス計算!

Dim i,j As Integer

For i = 2 ToRange(”A1”).End(xlDown).Row
For j=2 To Range(”B1”).End(xlToRight).Column

Cells(i,j).Value = Cells(i,1).Value * Cells(1,j).Value
Next j
Next i
Endsub

上記のように記述しましたが、
iの最終行が2となってしまっていますがなぜこのコードが間違っているのか分からないです。。どなたか教えていただけたら嬉しいです!

Aベストアンサー

確認してはいませんが…


>改行、スペースは実際にはきちんととっていますので気にしないでください
とのことなので、違っているのかもしれませんが、

>For i = 2 ToRange(”A1”).End(xlDown).Row
         ↓
 For i = 2 To Range(”A1”).End(xlDown).Row
で、うまくいきませんか?
100マス(10×10)と最初から決まっているので、範囲は 2 To 11 でも良いように思いますが…

改行、スペースなどが正しくなっているなら、Range(”A1”).End(xlDown).Rowの値が2以下になっている可能性が考えられます。(ということは、A1が空白セル、または、A3が空白セルなどなど・・)
A1が空白セルの場合は、
 For i = 2 To Range(”A2”).End(xlDown).Row
とするか、
 For i = 2 To 11
などとすることで、動作するのではないかと推測します。

Q極大値・極小値 を英語で

解答でよく、
最大値をMax、最小値をMinと書くことがありますが、
極値も極大値Max、極小値Minと書いてもよいのでしょうか?

英語では同じですが
これがよいのだとすると
極値も最大値・最小値も求める問題のときに混乱してしまう気がします。

わかりやすく納得できる説明が欲しいです。
よろしくお願いします。

Aベストアンサー

私が採点するときに極大・極小のところを《Max・Min》を使ってたら、【ホントに理解してますか?】とコメントを入れます。
そして【人に見せる解答に略語を使うのは避けたほうがいいです。】とも書きます。
(特にこの場合、【Max,Min】は最大値・最小値に対して使うことが多いのです。)

私は《減点したくなる》のですが、実際減点するのは数学的ではないと思うので、もちろん解が当たってれば正解にします。
(かなり矛盾があるかもしれませんが)数学的に理解していればどう書こうが普通は許してくれると思います。
ただ、解答を書くときには、見せる対象の人が納得できるような形にすべきだと考えます。
だから略語を使うのは避けるべきなのです。

(ただ私が言った【Max ×】は当然意味はわかりますが、数学的に許されない行為だと思うのです。)

QIf Not c Is Nothing Then ~延々処理が続く~ End If

質問というか相談というか
VBAで下記のようなコードをよく見ますし、私自身もこれで書いてます。

For i= 1 to 10
set c=Range.Find(”いろは")
If Not c Is Nothing Then


処理が続く


End If
Next i

cが見つからなかったら、さっさと次の i に進む場合の処理です。Ifの字下げがず~~っと延々続き、最後のNext iの直前でEnd If です。
・Exit For はあるのに 途中Next iは出来ない
・Goto 使って書くと「スパゲティプログラムだ」とか言われる
正直言って、上記コードとGotoスパゲティで可読性に差異があるとは思えません。何でもかんでもGotoはダメていう風潮がおかしいように思えます。

みなさんどうやって書いてますか?

Aベストアンサー

こんにちは。

>Goto 使って書くと「スパゲティプログラムだ」とか言われる
どっちかというと、今は、ネットの中で、某VBA系の専門掲示板で、他人のコードを罵る時に使う用語ですね。Goto を使ったから、スパゲティーと短絡して使うのに、その言った本人は、エラー処理ひとつ施していない隙だらけのコードだということが多いのです。「スパゲティプログラム」は、◯◯の一つ覚えの用語だと思います。

>For i= 1 to 10
>set c=Range.Find(”いろは")
>If Not c Is Nothing Then

>~
>処理が続く
>~
>
>End If
>Next i

これって、よく見るとおっしゃっていますが、ひとつ例外に、いわゆる「ブルートフォースアタック(総当り制)」のコードがありますね。それは、Goto 以外に抜け出せる方法がありませんね。「深いネストはするな」という禁を犯しているのだから、Goto 以前のものがあります。(何に使うかはご存知だと思いますし、それをとやかく言う人はいないでしょう。)

これを書き換え、再帰を使うと良いとか言う人もいるのでしょうけれども、そういうのは、知識だけで実際にやったことがない人の話だと思います。「スパゲティ」とか知らない人に、比べさせれば、再帰などを使った方法は、遅くてダメ出しされるのは目に見えています。特殊な例ですが。

ご質問で、実際の私は、内容にもよりますが、
Private flg As Boolean

Sub Main()
On Error Goto ErrHandler
For i= 1 to 10
 Call subRutine(findTxt)
 If flg Then Exit For
Next i
Exit Sub

ErrHandler:
処理
End Sub
'ここの中身はテンプレート化してあります。
Private Sub subRutine(ByVal findTxt) または、Public
'処理
End Sub

としているはずで、モジュールレベルの変数を、flg とし、サブルーチンの中に置いて、目的がかなったら、Flgは、Trueになって、ループから抜け出すようにします。

サブルーチン側では、End ステートメントを使用することさえもあります。(テンプレート化しているのは、Findメソッド、RegExpの正規表現、Sortメソッド、Dictionary とSortLists などがあります。[MZ-Tools 3.0]を使用)

GOTO は、構造化プログラムが登場した時に、排除するように言われてきたものです。古い時代の人は、GOTOに逃げたくなるのを抑えるために、「GOTO」を使うなって、肝に命じてきたのです。しかし、結局、Goto は、なくならなかったのは、一つには、ErrHandlerを使った、エラートラップのせいもあります。だから、Goto を書かないでErr.Raise (513~)で飛ばす方法がありますが、あまり使う人はいません。

ところで、
「スパゲティプログラム」という話に振られると、私は自信がありません。
読みやすさ(可読性)の対極になるものでしょうけれども、誰に対して言っているものか、ということです。私の大事にしている本の中に、アスキーの『QuickBASICプログラミング道場』(1991年)という本があります。

---引用
・本道場で推奨するプログラミングスタイル (p25~)

1.変数・定数・プロシージャーの命名法 (変数の型のサフィックスは使うな)
2.インデントを付けるべし
3.メインプロシージャは短くすべし
4.プロシージャは短くすべし
5.長いブロックはプロシージャーにすべし
6.汎用性のあるプロシージャーを作るべし
7.定数は活用すべし
8.GOTOは乱用(濫用)すべからず。●
 従来のBASICを使ってきた人の中には、GOTO文を多用する人がいるようだ。GOTO文はそのときは便利なように思うが、あとになってリストを眺めてみると、どこに飛んでいるか分からなくなることが多い。……わけがわからない最低の"スパゲティプログラム"になってしまう。
 【例】GOTO文をDOループに置き換える
----引用終わり

現代でも通用するというよりも、その言葉が生まれた時代背景がありますから、必ずしも、GOTOが問題だということではなさそうです。Goto を使わないということにこだわると、逆に墓穴を掘ることになります。

それと、DO ループにするというのは、DO ~ LOOPの間に緊張感(?)は生まれるけれども、無限ループを生み出しやすくなるのです。その頃はそれで良かったかもしれませんが、もうESCでは止まりません。今は必ずしも認められるものではありません。

それと、記録マクロを、そのままVBAプロシージャーに用いるのは、絶対にダメなのですよね。本当のスパゲティプログラムになってしまいます。ベタ書きになってしまうからで、一度、そういうコードを直してくれと言われましたが、怒りを抑えて、丁重にお断りました。

こんにちは。

>Goto 使って書くと「スパゲティプログラムだ」とか言われる
どっちかというと、今は、ネットの中で、某VBA系の専門掲示板で、他人のコードを罵る時に使う用語ですね。Goto を使ったから、スパゲティーと短絡して使うのに、その言った本人は、エラー処理ひとつ施していない隙だらけのコードだということが多いのです。「スパゲティプログラム」は、◯◯の一つ覚えの用語だと思います。

>For i= 1 to 10
>set c=Range.Find(”いろは")
>If Not c Is Nothing Then

>~
>処理が続く
>~
>
>End If
>Next...続きを読む

Q偏差値40英語・・・

私は本当に英語が出来ません。
というか、勉強の仕方がわかりません。

楽な方法じゃなくて良いので、英語が出来るようになる方法を教えて下さい。出来れば偏差値60の大学でトップのレベルになりたいです。

今は単語の覚え方も分からない、文法も分からない、短い文も読めないので長文なんて読めないってかんじです正直(笑)

何だか英語が不得意で、他の科目は偏差値65英語は40もいかないという感じです笑
原因は嫌いだからということもあるでしょうが、私が理系の頭なので、根本的に英語というものの勉強法が分かっていなくてだめなのかな?と思い質問させていただきました。

今高3です!

Aベストアンサー

おお、俺ガイル(笑)
つい先日、似たような質問をした者です。
私の場合、偏差値はあなたのより低い36でしたけど。
http://oshiete.goo.ne.jp/qa/8469327.html
以下は、あくまで「英会話ができるようになるためのお勧めの勉強法」であり、「受験で合格するためのお勧めの勉強法ではない」のですけど、それでもよろしければ。

私の場合、解決策としては「思い切って留学する」でした。

現実問題として留学するのが難しいのなら、
洋画を英語音声で観る。最初は字幕なしで。次には英語字幕付きの英語音声で。そして、その後は『観ない』。という勉強法がいいですかね。

NHKの教育番組(Eテレ)でやってる「プレキソ」という英語番組もいいですよ。
本来は子供向けの英語番組なんですが、日本語がまったく出てこないので、教材としては最適です。
英語ができない友人にまったくのボランティアで英会話の個人レッスンをしてるのですが、私は教材にこの番組を使っています。

とにかく、日本語が出ちゃダメなんです。日本語が出るとどうしても日本語に頼ってしまいます。脳が日本語の思考になってしまうので、英語での思考がいつまで経ってもできないんですよ。
英語で入ったものをそのまま英語で処理するんです。いちいち日本語に翻訳しない。そしていちいち辞書を引いて意味を確認しない。これが重要です。

人間は取り入れた情報を脳が処理しようとします。
食べ物だと食べやすい物を好むように、人間の脳は、処理しやすい情報を好んで処理しようとします。なので日本語が入ってくると、英語での情報を捨ててしまって日本語に頼りっぱなしになります。
なので(余談ですが)「スピードラーニング」。あれの効果については私は甚だ疑問に思いますね。英語の後で日本語の解説がつく。それが余計です。
全部英語の、解説は無し、の方がよっぽど効果があると思います。

また、最近では安価でスカイプを利用したインターネット英会話レッスンもあります。
そういうのを利用するのもいいのではないでしょうか。
私もまだ利用していませんが、近いうちに始めようかな?と思ってます。
私は「自分が英語を教わる代わりに、自分が日本語を教えるからレッスン代はタダ」ってサイトを利用しようか?と考えています。
http://www.e-kaiwa.net/

ああ、私が書いたのはあくまで「中3レベルぐらいの英語力はある」ということ前提です。
関係代名詞や受け身までは理解できた、というぐらいですね。
「I my me ってなんですか?」や、「be動詞ってなんですか?」レベルだと英語だけ聴いたとしても英語力の上達は見込めませんので、ラジオの基礎英語講座等を利用して、レベルの底上げをして下さい。

おお、俺ガイル(笑)
つい先日、似たような質問をした者です。
私の場合、偏差値はあなたのより低い36でしたけど。
http://oshiete.goo.ne.jp/qa/8469327.html
以下は、あくまで「英会話ができるようになるためのお勧めの勉強法」であり、「受験で合格するためのお勧めの勉強法ではない」のですけど、それでもよろしければ。

私の場合、解決策としては「思い切って留学する」でした。

現実問題として留学するのが難しいのなら、
洋画を英語音声で観る。最初は字幕なしで。次には英語字幕付きの英語音声で。そし...続きを読む

QMicroSoft BasicのDim文とVisualBasicのDim文の違い

私が20年前にMicroSoft Basicを使っていたときは、DIM文はDIMENSIONの略で配列型変数の宣言に使っていました。

最近VisualBasicの勉強を始めたのですが、変数の宣言はすべてDim文になっており、昔のMS BasicのDim文と意味合いが変わっているのに驚いています。

ここで質問させてください。
・なぜ配列を意味するDimension文が変数の宣言なのか?
・どのバージョンのBasicからDim文の意味が変わったのか?

私が使用していたのはNEC N-Basic,N-88Basic,N-98Basicです。

Aベストアンサー

VISUAL BASIC のDimは ディメンジョンの略です。
私の経験ではVB2.0時代からありました。

配列0を考えた場合変数とおなじであるからだとおもいます


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング