Excel VBAで条件の設定方法を教えてください

このQ&Aのポイント
  • Excel VBAを使用して、斜線の条件付き設定をする方法を教えてください。
  • 現在、斜線を引き、その斜線の最初のセルに数値で条件を設定し、その条件に基づいて斜線の太さや色を変えたいですが、うまくいきません。どのようにすればできるか教えてください。
  • Excel VBAを使用して、斜線の条件に基づいて太さや色を設定する方法を教えてください。
回答を見る
  • ベストアンサー

excel VBA で条件の設定方を教えて下さい。

今、斜線を引きその斜線データの最初のセルに数値で(1とか3とかの数値の)条件をつけて置き、その条件で、太さ、色等を変えて斜線を引きたいのですがうまくいきません。何方か教えて頂けませんか。 --------------------- dim myrange as range workheets("補助計算").range("c8:c47").value = worksheets("時刻").range("c8:c47").value workheets("補助計算").range("g8:h47").value = worksheets("時刻").range("g8:h47").value with worksheets("時刻")     v=worksheets("時刻").range("m2").value+12'描画本数     for i = 12 to v step 1'設定可能本数50本 set myrage = worksheets("補助計算").range("t3:t47") myrange.value = .range(.cells(3,i),.cells(48,i)).value for cnt = 75 to 113 step 2 e = worksheets("ダイヤ").cells(cnt,10).value       f = worksheets("ダイヤ").cells(cnt,11).value       g = worksheets("ダイヤ").cells(cnt+1,10).value       h = worksheets("ダイヤ").cells(cnt+1,11).value with worksheets("ダイヤ").shapes.addline(e,f,g,h) .line.weight = 1.1 .line.forecolor.rgb = vbblue end with next cnt next i end with ----------------------- 上記コードで、斜線が何本か引かれます、その際、データ元のセルに数値の条件、例えば、1 とか3とかの数値を入力されているときは、それによって、斜線の色、又は線の太さをかえたいのですが、指定の仕方は、時刻シートの時刻の上欄セルに、線の指定のセル、太さ指定のセルに別々に指定おき、それを参照して、線の色、太さをかえたいのですが、いろいろ試みましたがうまくいきません。上記コードにどのように追加コードをすればよいか何方か教えていただけませんか。できれば、線の色は3色以上設定できればありがたいです。、

  • diwk85
  • お礼率83% (141/168)

質問者が選んだベストアンサー

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

 申し訳御座いません。回答No.3で挙げたVBAの中に一部誤りが御座いました。 With .Range("J" & 75 +(i - 1)* 2) において、使用する変数をcntとすべきところを、誤ってiにしておりました。  それと、 myLine(1) = .Offset(1,0).Value '始点のy座標の値を変数に格納 と myLine(2) = .Offset(0,1).Value '終点のx座標の値を変数に格納 で、参照するセルが逆になっておりました。  ですから、正しくは以下の通りです。 Sub QNo8947661() Dim cnt, j As Long Dim myLine(7), myWeight(2) As Single Dim myColor(3, 2) As Byte myWeight(0) = 1.1 '線の太さのパターンその1 myWeight(1) = 2.5 '線の太さのパターンその2 myWeight(2) = 3.5 '線の太さのパターンその3 myColor(0, 0) = 0 '線色のパターンその1のRの値 myColor(0, 1) = 1 '線色のパターンその1のGの値 myColor(0, 2) = 2 '線色のパターンその1のBの値 myColor(1, 0) = 255 '線色のパターンその2のRの値 myColor(1, 1) = 3 '線色のパターンその2のGの値 myColor(1, 2) = 4 '線色のパターンその2のBの値 myColor(2, 0) = 5 '線色のパターンその3のRの値 myColor(2, 1) = 255 '線色のパターンその3のGの値 myColor(2, 2) = 6 '線色のパターンその3のBの値 myColor(3, 0) = 7 '線色のパターンその4のRの値 myColor(3, 1) = 8 '線色のパターンその4のGの値 myColor(3, 2) = 255 '線色のパターンその4のBの値 With Sheets("ダイヤ") For cnt = 1 To 20 With .Range("J" & 75 + (cnt - 1) * 2) myLine(0) = .Offset(0, 0).Value '始点のx座標の値を変数に格納 myLine(1) = .Offset(0, 1).Value '始点のy座標の値を変数に格納 myLine(2) = .Offset(1, 0).Value '終点のx座標の値を変数に格納 myLine(3) = .Offset(1, 1).Value '終点のy座標の値を変数に格納 myLine(4) = myWeight(.Offset(0, 2).Value) '線の太さの値を変数に格納 For j = 0 To 2 myLine(5 + j) = myColor(.Offset(1, 2).Value, j) '線色の値を変数に格納 Next j End With With .Shapes.AddLine(myLine(0), myLine(1), myLine(2), myLine(3)).Line '線を引く .Weight = myLine(4) '線の太さの設定を線に反映 .ForeColor.RGB = RGB(myLine(5), myLine(6), myLine(7)) '線色の設定を線に反映 End With Next cnt End With End Sub

diwk85
質問者

お礼

こんなに詳しくありがとう御座います。 NO1.2で教えて頂きました考え方で線の太さの変更はできました。とはいっても、ワークシート関数をふんだんに使い、VBAなのか普通のエクセルなのかわからないようなものですが、見た目には、VBAといったものです。今回こんなにご検討いただきましたので、正真正銘のVBAコードといったものにしたいと思います。 今回は本当にお世話になりました。 今後ともよろしくお願いいたします。 74歳♂

その他の回答 (3)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

>3つのセルの条件を格納し,個々に順序よく変化させるとなると、かなり難しいようです  色を指定する3つのセルに加えて、線の太さを指定する条件もありますから、セルを4つ増やす必要がありますね。  既に現在、   e = worksheets("ダイヤ").cells(cnt,10).value   f = worksheets("ダイヤ").cells(cnt,11).value   g = worksheets("ダイヤ").cells(cnt+1,10).value   h = worksheets("ダイヤ").cells(cnt+1,11).value というやり方で、線の両端の座標を示す4つの値を、J列~K列の奇数行と偶数行合わせて4つ1組のセルに入力しておき、個々に順序良く変化させておられるのですから、それと同じやり方で、空いている列を2列使用して、その2列の奇数行と偶数行合わせて4つ1組のセルに線の太さ、線色の赤色の値(R)、線色の緑色の値(G)、線色の青色の値(B)を入力しておいて、それらの条件を各変数に格納し、個々に順序良く変化させれば良いだけだと思います。  それから、もし、線の色の種類や線の太さが少数のパターンに限られている場合には、それら決まったパターンごとの各色や太さに関する値を配列変数に格納しておき、描く線の種類を指定する際には「その配列変数の何番目の所に格納されている条件を使用するのか」で指定する様にしておきますと、増やさねばならない列を1列だけで済ます様にする事も出来ます。  例えば、配列変数myWeight()に3種類の線の太さのパターンを、 配列変数myColor()に4種類の線の色のパターンを格納しておき、 L列の奇数列のセルに、線の太さのパターンの内のどれを用いるのかを指定するための情報である0~2の整数値を、 L列の偶数列のセルに、線色パターンの内のどれを用いるのかを指定するための情報である0~3の整数値を それぞれ入力しておき、 これから線を引く上で必要となる8種類(両端の座標の数値4+線の太さの数値1+線色の数値3)の数値情報を配列変数myLine()に格納して使用するものとしますと、一例としては次の様な構文となります。  尚、線の太さやRGBの各数値は暫定的に記述したものに過ぎませんので、質問者様の好みに合わせて適時変更して下さい。 Sub QNo8947661() Dim cnt, j As Long Dim myLine(7), myWeight(2) As Single Dim myColor(3,2) As Byte myWeight(0) = 1.1 '線の太さのパターンその1 myWeight(1) = 2.5 '線の太さのパターンその2 myWeight(2) = 3.5 '線の太さのパターンその3 myColor(0,0) = 0 '線色のパターンその1のRの値 myColor(0,1) = 1 '線色のパターンその1のGの値 myColor(0,2) = 2 '線色のパターンその1のBの値 myColor(1,0) = 255 '線色のパターンその2のRの値 myColor(1,1) = 3 '線色のパターンその2のGの値 myColor(1,2) = 4 '線色のパターンその2のBの値 myColor(2,0) = 5 '線色のパターンその3のRの値 myColor(2,1) = 255 '線色のパターンその3のGの値 myColor(2,2) = 6 '線色のパターンその3のBの値 myColor(3,0) = 7 '線色のパターンその4のRの値 myColor(3,1) = 8 '線色のパターンその4のGの値 myColor(3,2) = 255 '線色のパターンその4のBの値 With Sheets("ダイヤ") For cnt = 1 to 20 With .Range("J" & 75 +(i - 1)* 2) myLine(0) = .Offset(0,0).Value '始点のx座標の値を変数に格納 myLine(1) = .Offset(1,0).Value '始点のy座標の値を変数に格納 myLine(2) = .Offset(0,1).Value '終点のx座標の値を変数に格納 myLine(3) = .Offset(1,1).Value '終点のy座標の値を変数に格納 myLine(4) = myWeight(.Offset(0,2).Value) '線の太さの値を変数に格納 For j = 0 to 2 myLine(5 + j) = myColor(.Offset(1,2).Value , j) '線色の値を変数に格納 Next j End With With .Shapes.Addline(myLine(0), myLine(1), myLine(2), myLine(3)).Line '線を引く .Weight = myLine(4) '線の太さの設定を線に反映 .ForeColor.RGB = RGB(myLine(5), myLine(6), myLine(7)) '線色の設定を線に反映 End With Next cnt End With End Sub  後、質問者様のVBAでは、 with worksheets("時刻") によってワークシートを指定するWithステートメントが使われている中で、更に with worksheets("ダイヤ").shapes.addline(e,f,g,h) というワークシートの情報を含むWithステートメントが入れ子になっていますが、なるべくならワークシート等の同種のオブジェクトを指定する情報を含んでいるWithステートメントを入れ子にして使うのは避けた方が宜しいのではないかと思います。  Withステートメントを入れ子にして使うのは、上位のレベルのオブジェクトを指定するWithステートメントの中に、下位のレベルのオブジェクトを指定するWithステートメントを入れ子にする場合などに限定された方が無難だと思います。  それから、質問者様のVBAには、workheets("補助計算")やworksheets("時刻")等のワークシートが登場している様ですが、線を引く際に使われている変数の決め方を拝見しますと、線を引く事に関してworkheets("補助計算")やworksheets("時刻")は全く関わって来ない様に思います。  それにもかかわらず何故、質問者様のVBAではworkheets("補助計算")やworksheets("時刻")等のワークシートが登場しているのでしょうか?  補助計算シートや時刻シートは、本件のマクロには不要ではないでしょうか?  ですから、 dim myrange as range workheets("補助計算").range("c8:c47").value = worksheets("時刻").range("c8:c47").value workheets("補助計算").range("g8:h47").value = worksheets("時刻").range("g8:h47").value with worksheets("時刻")     v=worksheets("時刻").range("m2").value+12'描画本数     for i = 12 to v step 1'設定可能本数50本 set myrage = worksheets("補助計算").range("t3:t47") myrange.value = .range(.cells(3,i),.cells(48,i)).value の部分と末尾の next i end with の部分は本件のマクロには不要ではないでしょうか?  又、 workheets("補助計算").range("c8:c47").value = worksheets("時刻").range("c8:c47").value workheets("補助計算").range("g8:h47").value = worksheets("時刻").range("g8:h47").value という具合に、補助計算シート上に時刻シートと全く同じ情報をコピーするのは無意味だと思います。  その様な事をせずとも、補助計算!C8:C47や補助計算!G8:H47の範囲内のセルを参照する必要がある処理を行う際には、補助計算シートを参照するのではなく、時刻!C8:C47や時刻!G8:H47の範囲内のセルの方を直接参照する様にされた方が宜しいのではないかと思います。

diwk85
質問者

お礼

すみません。何とか一人立ちして、挑戦しようと思いましたが、もう一度教えてください。 とりあえず、コードを写し取り実行してみました。何らかの状況のへんかがあらわれるかと思いましたが、実行時エラー、「インデックスが有効範囲にありません」と次のコードで出ます myline(4)=myweight(.offset(0,2).value これをスルーさせると myline(5+j)=mycolor(.offset(1,2).value,j) でやはり同じコメントのエラーが これをスルーさせると with .shapes.addline(myline(0),myline(1),myline(2),myline(3)).line で出エラーがでます。 ネットでヘルプで確認しましたが offise 2013 について の説明で 「インデックスが有効範囲にありません(エラー9)」 の説明がありますが、残念ながら理解できません。 写しミスがあるかと思い、ご解答の部分をコピーしてみましたが、やはり同じ箇所で同じエラーがでます そのまま私のところで実行は、無謀かと思いましたが、それなりに何か状況が変わるかもとの思いで、実行してしまいました。すみません。 こちらの様子を想像してコードを検討して頂きましたので、まったく申し訳ありません、私としてどのような部分を注意しチッエク修正したらよいでしょうか、お手数ですがもう一度お願いできませんか。 お願いいたします。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 そのVBAの構文の中の with worksheets("ダイヤ").shapes.addline(e,f,g,h) .line.weight = 1.1 .line.forecolor.rgb = vbblue end with という箇所において、 .line.weight = 1.1 の1.1という値を変数を用いて変更可能にすれば線の太さを変える様にする事が出来ます。(変数の名称は何でも構わないのですが、「weight =」の値を設定するための変数でしたら、myWeightなどとした方が、何のための変数なのか判り易くなるかと思います)  又、 .line.forecolor.rgb = vbblue のvbblueという値を変数を用いて変更可能にすれば、線の色を変える様にする事が出来ます。  尚、 .line.weight = 1.1 .line.forecolor.rgb = vbblue は、いずれも.lineが付いている事は共通なのですから、 with worksheets("ダイヤ").shapes.addline(e,f,g,h) .line .weight = 1.1 .forecolor.rgb = vbblue end with としてしまった方が良いと思います。  それと、色の設定は .ForeColor.RGB = RGB(赤色の数値,緑色の数値,青色の数値) の形式で設定されるものなのですから、例えば .ForeColor.RGB = RGB(myRed,myGreen,myBlue) 等の様に3つの変数myRed、myGreen、myBlueで設定される様にしておき、その上でmyRed、myGreen、myBlueの各々の値を、3つのセルにそれぞれ入力された数値の条件に合わせて変える様にされると良いと思います。  尚、色設定値として有効な数値は0~255の範囲の整数値です。  後、質問者様が投稿したVBAに関する別の質問の時も気になっていた事なのですが、変数を使う時にはちゃんとDimで定義してからにして下さい。  今回のVBAでも、定義されているのはmyrangeだけで、他はv、i、e、f、g、h、vbblueなど、定義されていない変数ばかりです。

diwk85
質問者

お礼

ご解答ありがとう御座います。 たしかに、RGBの数値を手動で変更してみると、全斜線がきれいに変化します、したがってやるべきことはわかりましたが、3つのセルの条件を格納し,個々に順序よく変化させるとなると、かなり難しいようですが チャレンジします。 変数の宣言がおろそかになっていることについては、申し訳ありません、ご指摘の東リです。動作するかどうか結果だけ追いかけてしまい見苦しいコードを書きはずかしいです。 VBAがどういうものかまだ全然理解しておりません。できるだけ注意し取組たいとおもいます。 まづは、受信のお礼まで、ありがとう御座います。

noname#206655
noname#206655
回答No.1

線の色とか幅が正しいとして、セル値が変数なら  color=Cells(a,b)  ってのを考えて、ペアレント(親)が worksheets("ダイヤ") で、どうでしょう?

diwk85
質問者

お礼

ご解答ありがとう御座います。 もうお一方の、kagakusuki様からもお解答いただきました。私の力では、簡単にはいかないようですが 挑戦したいと思います。 まづは。受信のおれいまで、ありがとう御座います。

関連するQ&A

  • excel VBAでのループの方法

    excel VBAでループの方法がわかりません、何方か教えて頂けませんか。 現在,下記様なコードを作成して一応目的に近くなりましが、1か所方法がわかりません。 sheets(時刻)の、(N6:N45 )の時刻データをsheets(基準値時刻)の(AI5:AI44)に転記して、その 転記されたデータを使い時刻を描画して、またsheets(時刻)を参照してこんどは、4列右の(R6:R45)のデータ読み取り、転記場所は、sheets(基準値時刻)の(AI5:AI44)の前回と同じセルに転記し、 そのノテータ を使い時刻を描画します。この繰り返しを行いたいのですが、 を[ j ≖ worksheets("時刻").cells(cnt2,10).value ] の列の10の数値を10,14,18、・・・と変化させたい のですが、うまくいきません。  読み取るデータは4列ずつ右に移動、転記場所は同じ場所、1回の読み込み、転記、描画が完了 してから、読み取るデータの位置のみ変更(4列右へ移動)、後の動作は同じ。 この繰り返しをしたいのです。 '-----------時刻取得・転記------------ for x = 1 to 50 For cnt2 = 6 To 45 Step 1      '6行から45行を1stepずつ j = Worksheets("時刻").Cells(cnt2, 10).Value '時刻sheetsから時刻取得  Worksheets("基準値時刻").Cells(cnt2 - 1, 35).Value = j '取得時刻を基準値時刻sheetへ   Next cnt2 '---------------時刻を描画-------------- For cnt4 = 5 To 44 Step 2 k = Worksheets("基準値時刻").Cells(cnt4, 38).Value l = Worksheets("基準値時刻").Cells(cnt4, 39).Value m = Worksheets("基準値時刻").Cells(cnt4 + 1, 38).Value n = Worksheets("基準値時刻").Cells(cnt4 + 1, 39).Value With Worksheets("勾配計算").Shapes.AddLine(k, l, m, n) .Line.Weight = 1 .Line.ForeColor.RGB = vbBlue End With Next cnt4 Next x 以上がコードの一部です。よろしくお願いいたします。   環境は, OSは  windows 8.1 です。

  • 自動でセルの数値を変更したい

    自動でセルの数値を変更したいのですが、基本的な間違いがあるようで、できません何か別 な解決方法がありませんか、 ---------------------------------------------------- Sub 斜線オリジナル3() ' ' 斜線オリジナル3 Macro Set rngstart = Worksheets("時刻2").Cells(3, 9) Set rngend = Worksheets("時刻2").Cells(13, 25) BX = rngstart.Left BY = rngstart.Top EX = rngend.Left EY = rngend.Top '直線 With ActiveSheet.Shapes.AddLine(BX, BY, EX, EY).Line End With End Sub ------------------------------------------------- このコードは、参考にしたコードを自分が勝手に簡単にしたものです、知識rがあってやったものでは ありませんのでお許し下さい。理由はわかりませんが、なぜか一応は動作します。(斜線が引かれます。) 以上のコードで、Cells(3,9) と Cells(13,25) の列に相当する、9と25の数値を自動で変えたいのですが、  for cnt = 10 to 30 a = worksheets("時刻2").cells(3,cnt).value set rngstart = worksheets("時刻2").cells(3,a) のようにしたいのですが、エラーがでます。どのようにしたらいいでしょうか、教えて頂けませんか。

  • Excel VBA Rangeについて

    下記のコードは、あるテキストに掲載されていたコードです。 D5に番号を入力すると、F5に文字が表示されるというようなコードです。 下記コードのRange("顧客コード")とは何を意味するのでしょうか? Worksheets("顧客")の意味は分かりますが、私の知識ではRange(" ")の中に入るのは、A1などしか分かりません。 よろしくお願いします。 Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim r As Integer, myRange As Range Set myRange = Worksheets("顧客").Range("顧客コード") With Target '変更されたセルがD5だったら If .Row = 5 And .Column = 4 Then '顧客コードの位置を取得 r = Application.WorksheetFunction _ .Match(Target.Value, myRange, 0) 'セルに顧客名を表示 Range("F5") = Worksheets("顧客").Range("B1").Offset(r - 1).Value End If End With End Sub

  • エクセルでK列の最終行のセル値を指定のセルに・・・

    いつもお世話になっております。 5月に下記のコードを教えてもらい、簡単な改良や条件を追加しながら複数のシートに展開中なのですが新しいパターンが出たのでHELPです。 K列の最終行の値を同じ表のH6のセルに転記してそれを使って出た計算結果(セルH7)の値をH列の最終行のセルに転記したいのですが。 (具体的な列とセルはシートで変わる可能性があります) 下記のコードは別のシート(計算表)の特定(結果)のセルの値を指定した列に転記するコードでこれで何とかしようとしましたが歯が立たず。 なにとぞよろしくお願いいたします。 Option Explicit Sub Sample3()   Dim MyRange As Range  With ThisWorkbook   Set MyRange = _    .Sheets("入力表").Cells(Rows.Count, 5).End(xlUp)   MyRange.Offset(1, 0).Value = .Sheets("計算表").Range("J15").Value   MyRange.Offset(1, 1).Value = .Sheets("計算表").Range("J20").Value  End With End Sub

  • エクセルVBAで

    登録ボタンを作りたいのですが うまくいきません。 応答無しになってしまいます。 仕事でコードを入力して、住所やその他の関連事項を 登録して、検索し、封筒に宛名印刷し、登録内容の修正をしたいと思っています。 登録ボタンは下記のようなものを作りました。 Private Sub CommandButton1_Click() Dim bk As Workbook Dim sh1 As Worksheet Dim sh2 As Worksheet Dim cnt1 As Long Set bk = ThisWorkbook Set sh1 = bk.Worksheets("現場登録検索") Set sh2 = bk.Worksheets("一覧") cnt1 = 6 Do While sh2.Cells(cnt1, 2).Value <> "" cnt = cnt1 + 1 Loop '得意先CD sh2.Cells(cnt1, 2).Value = sh1.Cells(2, 3).Value '現場CD sh2.Cells(cnt1, 3).Value = sh1.Cells(3, 3).Value '送り方 sh2.Cells(cnt1, 22).Value = sh1.Cells(4, 3).Value '封筒 sh2.Cells(cnt1, 23).Value = sh1.Cells(5, 3).Value MsgBox "登録できました。" End Sub 何が悪いのでしょうか? よろしくお願い致します。

  • ワークシート名を変数に格納する方法

    VBA初心者です。ワークシートが5つあり各シートにデータを転記するマクロを作成したいのですがワークシート名を変数にしてループ処理することはできるのでしょうか? 下記はワークシート名"H"にだけ転記するマクロを作成してみましたがこの後がわからず悩んでいます。よろしくお願いします。 Dim データ行 As Integer Dim cnt As Integer Dim データ数 As Integer cnt = 4 データ行 = Cells(Rows.Count, 8).End(xlUp).Row For データ数 = 11 To データ行   If Worksheets("入力").Cells(データ数,1).Value= "2"Then Worksheets("H").Cells(cnt, 6).Value = Worksheets("入力").Cells(データ数, 8).Value Worksheets("H").Cells(cnt, 7).Value = Worksheets("入力").Cells(データ数, 9).Value Worksheets("H").Cells(cnt, 8).Value = Worksheets("入力").Cells(データ数, 27).Value Worksheets("H").Cells(cnt, 9).Value = Worksheets("入力").Cells(データ数, 19).Value Worksheets("H").Cells(cnt, 10).Value = Worksheets("入力").Cells(データ数, 20).Value Worksheets("H").Cells(cnt, 11).Value = Worksheets("入力").Cells(データ数, 21).Value Worksheets("H").Cells(cnt, 12).Value = Worksheets("入力").Cells(データ数, 10).Value Worksheets("H").Cells(cnt, 13).Value = Worksheets("入力").Cells(データ数, 11).Value Worksheets("H").Cells(cnt, 14).Value = Worksheets("入力").Cells(データ数, 22).Value Worksheets("H").Cells(cnt, 15).Value = Worksheets("入力").Cells(データ数, 23).Value cnt = cnt + 1 End If Next データ数

  • エクセルのVBAで悩んでいます。

    いつもありがとうございます。 エクセルのVBAで悩んでいます。 セルの範囲指定をVBAで行いたいのです。 ただし、引数に数値変数を使用する為、Cellsプロパティを使います。 すると、離れている範囲の範囲指定が出来ないのです。 例えば、Rangeプロパティだと、 Range("A5:E5,A9:E32").Select こうなるところを、 A9:E32 を変数に置き換えたくて、 Range("A5:E5", Cells(g, 1), Cells(h, 5)).Select と、するとエラーが出ます。 VBAの前文は次の通りです。 Private Sub CommandButton1_Click() a = Me.TextBox1.Value b = Me.TextBox2.Value Set c = Range("a:a").Find(what:=a, LookIn:=xlValues, lookat:=xlWhole) Set d = Range("a:a").Find(what:=b, LookIn:=xlValues, lookat:=xlWhole) 'MsgBox c + d e = c.Address 'MsgBox e f = d.Address 'MsgBox f g = Range(e).Row MsgBox g h = Range(f).Row MsgBox h Range(Cells(g, 1), Cells(h, 5)).Select End sub よろしくお願い致します。

  • Excel VBAシートの同一番地のセルのリスト化

    別々のシートの同一番地のセルの値をリスト化するのにこのようなVBAを見つけました。 シートは追加せず、既存のシートを指定したくて、色々と書き換えをチャレンジしましたがうまくいきません。 既存のシートを指定し、この作業を行うにはどうしたらよいのでしょうか? ご教示いただけますと幸甚です。 Sub Test1() Dim TmpSheet As Worksheet, i As Integer i = Worksheets.Count Set TmpSheet = Worksheets.Add(After:=Sheets(Sheets.Count)) With TmpSheet For i = 1 To i .Cells(i, 1).Value = Worksheets(i).Name .Cells(i, 2).Value = Worksheets(i).Range("E5").Value Next End With End Sub

  • excel vba でtextboxの色、線を消す

    excel VBA の中でtext boxを作成しその中に文字を転記します。その際中の文字だけを表示し塗りつぶしなし、,線なしにしたいのですが何か方法はありませんか。手動で、図形書式の設定の、塗りつぶしなし,線なし、にすればできますが、次に作成するともとに戻ってしまいます。 コードは、下記のコードです。 dim temp as shape t = worksheets("ダイヤ").range("q93").value for j = 73 to t step 1'駅数の数NEXT m = worksheets("ダイヤ").range("f110").value’表示位置調整 k = worksheets("ダイヤ").cells(j + m.17).value’表示位置取得 set temp = worksheets("ダイ ヤ ").shapes.addtextboxmsotextorientationhorizontal.32,k,65,17)’textbox作成 temp. textframe.characters.text = worksheets("ダイヤ").cells(j,15).value、駅名転記 next j このコードで現在textboxを作成その中に文字を転記できますが、ボックスも表示されされてしまいま す、ボックスは消し、文字だけ表示することはできませんか。 何方か教えて頂けませんか。

  • エクセルVBAで罫線を引きたいのですが

    コマンドボタンを押すと、対応するVBAが実行される ところまでできたのですが 10行目のA1~G10まで、アンダーラインを引きたいのです 下記はそれらしいVBAをコピーして実行したものです これでは、各セルに二重線で縁取りされました それを、アンダーラインを引きたいのですが、教えてください For Each myRange In Worksheets(1).Range("A10:g10") '←(1) myRange.Borders.LineStyle = xlDouble Next myRange できれば、For Each、なんか使わないでできると ありがたいのですが よろしくお願いします

専門家に質問してみよう