ここから質問投稿すると、最大4000ポイント当たる!!!! >>

Excel2007を使用しています。
画像のように,「印刷」シートと「データ」シートがあります。
画像のように,「印刷」シートのAO112~BZ112のセルを結合しています。

そのセルには,VLOOKUP関数で,「データ」シート10列目のデータを返すようにしています。
関数を見てもらえば分かるとおり,
もし10列目にデータがなければ(VLOOKUPで値が0なら)””(空白)を返すようにしています。


以上のようなシートで,このセルにデータが無い場合,
画像のAO113~BZ113のように右上がりの斜線を引きたいのです。
もちろん,データが入っている場合は,斜線は消します。

マクロに関しては,まだまだ初心者のため,
ほとんど分からないので,分かりやすく教えていただけませんでしょうか?
お願いします。

「Excelのセルに斜線を引くマクロ」の質問画像

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

A 回答 (5件)

No.2です。



次のように変更しました。

If Target.Column = 81 And Target.Row = 2 Then
'Stop
myR = Application.VLookup(Range("$CC$2"), Sheets("データ").Range("1:1048576"), 10, False)
If IsError(myR) Then
Range("AO113:BZ113").Borders(xlDiagonalUp).LineStyle = xlContinuous
Range("AO113:BZ113").ClearContents
Else
Range("AO113:BZ113").Borders(xlDiagonalUp).LineStyle = xlNone
Range("AO113:BZ113").Value = myR
End If
    • good
    • 1
この回答へのお礼

何度も親切にご指導くださいまして
ありがとうございます。
うまくできました。

勉強になりました。

お礼日時:2012/03/24 18:32

横からおじゃまします。


CC2の値が変わった時にマクロが動作するようにすればいいと思います。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$CC$2" Then Exit Sub
If Range("AO112").Value = "" Then
Range("AO112:BZ112").Borders(xlDiagonalUp).LineStyle = xlContinuous
Else
Range("AO112:BZ112").Borders(xlDiagonalUp).LineStyle = xlNone
End If
End Sub
ご希望通りの動作であればよいのですが。
    • good
    • 0
この回答へのお礼

親切にありがとうございました。

うまくできました。
少しだけマクロの内容も理解できたように思います。

また機会がありましたらよろしくお願いします。

お礼日時:2012/03/24 18:33

No.2です。



AO112には、式が入っているのですから、判断条件には、使えませんね。
マクロの中で式を評価する必要があります。

AO112の式に何が入っているか教えてもらえますか。
画像では見えにくいため。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

AO112の式は,『データ』シートからVLOOKUP関数でデータを返すようにしています。

このファイルは,Sheet1が『印刷』シートで,Sheet2が『データ』という2つのシートから成っています。

『印刷』シートのAO112は,CC2のセルに入力した数字を基に,VLOOKUP関数を使って
『データ』シートの10列目の値を返すようにしています。
しかし,『データ』シートの10列目は,値が入っていないセルもあるので,その場合は空白""を返すようにしているため,次のような式になっています。


=IF(VLOOKUP($CC$2,'データ'!$1:$1048576,10)=0,"",VLOOKUP($CC$2,'データ'!$1:$1048576,10))

もしかしたら,この式も,もっと簡単にできるのかもしれませんが。。。
いちおう,この式を使うことで,『データ』シートの10列目にデータがあれば,そのデータをAO112に記入し,
データが無い場合は,空白のままということになっています。
そこで,今回の質問は,その空白の時に斜線を引きたいということなんです。

文章力がないので,わかりにくいかもしれませんが
この説明でいかがでしょうか?
よろしくお願いします。

お礼日時:2012/03/24 15:26

以下のコードを標準モジュールではなくワークシートのコードに貼り付けてください。



Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 41 And Target.Row = 112 Then
If Range("AO112") = "" Then
Range("AO113:BZ113").Borders(xlDiagonalUp).LineStyle = xlContinuous
Else
Range("AO113:BZ113").Borders(xlDiagonalUp).LineStyle = xlNone
End If
End If

End Sub
    • good
    • 0
この回答へのお礼

早速ご回答ありがとうございました。

私の説明が悪かったようで,
AO112にデータが無ければ,AO112に右上がりの斜線を引くようにしたいのです。
(AO113ではありませんでした。すみません)

そこで,教えていただいたマクロの


>If Range("AO112") = "" Then
>.Borders(xlDiagonalUp).LineStyle = xlContinuous
>Else
>Range("AO113:BZ113").Borders(xlDiagonalUp).LineStyle = xlNone


Range("AO113:BZ113")をRange("AO112:BZ112")に変えてみました。


ところが,AO112には,次のような数式が入っています。

=IF(VLOOKUP($CC$2,'データ'!$1:$1048576,10)=0,"",VLOOKUP($CC$2,'データ'!$1:$1048576,10))

すると,数式が入っているので""と思ってもらえなかったのか。。。
斜線が引けませんでした。

この数式を消すと引けるので,もう一歩だと思うのですが。。。
まったくのマクロ初心者のため,さっぱり分かりません。

よろしくお願いします。

お礼日時:2012/03/24 12:20

以下でどうでしょうか?



Sub macro()
With Worksheets("印刷")
If .Range("AO112").Value = "" Then
 Shapes.AddLine .Range("AO113").Left, _
   .Range("AO113").Top + .Range("AO113").Height, .Range("BZ113").Left, .Range("BZ113").Top
End If
End With
End Sub
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。

2点,質問してよいでしょうか?


1.斜線を引くことはできるのですが,「データ」シートからVLOOKUP関数でデータを引用してくるのですが,データが変わる度に,自動でマクロが実行できるようにしたいのですが。。。。連続印刷する時に対応して欲しいのです。

2.新たなデータになったとき,AO112のセルにデータが入っている時は,斜線が消えなければならないのですが,残ったままになっています。

以上の2点をよろしくお願いします。

お礼日時:2012/03/23 17:05

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

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

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

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

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

Qエクセルの質問です。条件によってセルに斜線を引きたいのですが。

出勤表で備考の欄に”休み”と入力すると
出勤日の出勤時間、退勤時間、休憩時間の
それぞれのセルに斜線を引く設定がしたいのですが…。
初歩的な質問ですみません。
分かる方、教えて下さい。

Aベストアンサー

どうしても斜線が必要なら、ワークシートのイベントを使うしか無いです。
E列:備考
B-D列が時間記入欄とします。
記入範囲は5-30行目まで。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Rc As Variant
Set Rc = Intersect(Target, Range("E5:E30"))

If Not Rc Is Nothing Then
With Range(Target.Offset(0, -3).Address & ":" & Target.Offset(0, -1).Address)
If Target.Value = "休み" Then
.Borders(xlDiagonalUp).Weight = xlHairline
'.Borders(xlDiagonalUp).LineStyle = xlDash
'.Borders(xlDiagonalUp).LineStyle = xlDot
.Borders(xlDiagonalUp).LineStyle = xlContinuous
.Borders(xlDiagonalUp).ColorIndex = 3
Else
.Borders(xlDiagonalUp).LineStyle = xlNone
End If
End With
End If



End Sub

どうしても斜線が必要なら、ワークシートのイベントを使うしか無いです。
E列:備考
B-D列が時間記入欄とします。
記入範囲は5-30行目まで。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Rc As Variant
Set Rc = Intersect(Target, Range("E5:E30"))

If Not Rc Is Nothing Then
With Range(Target.Offset(0, -3).Address & ":" & Target.Offset(0, -1).Address)
If Target.Value = "休み" Then
.Borders(xlDiagon...続きを読む

Q【Excel VBA】空白の結合セルに右上り斜線を引く

Excel VBAは初心者です。
仕事で必要なため、アドバイスをいただけると非常に助かります。
よろしくお願いします。

【VBAで実現したいこと】
 下記のようなセルで構成されている簡単な
 申請書を作成しております。
 
 結合セル1:ABCD列と4行目で結合されたセルで、氏名を入力します。
 結合セル2:EFGH列と4行目で結合されたセルで、氏名を入力します。
 結合セルA:ABCD列から5678行で結合されたセルです。
 結合セルB:EFGH列から5678行で結合されたセルです。
 ※結合セル1、2~10まで存在し、結合セルA、B~Jまで存在します。

 結合セルAは結合セル1を参照し、結合セル1が空欄の場合
 結合セルAに右上りの斜線を引きます。結合セル1が空欄でない場合、
 何もしません。

 結合セルBは結合セル2を参照し、結合セル2が空欄の場合
 結合セルBに右上りの斜線を引きます。結合セル2が空欄でない場合、
 何もしません。
 同様な処理を、結合セルJ、結合セル10まで行います。

【教えていただきたいこと】
 1.結合セルA~J、結合セル1~10全てが空欄だった場合、
  空欄の結合セルは右上りの斜線を引きます。
  下記のプログラムを作成しましたが、右上りの斜線が
  引けません。
  どのようにしたら良いでしょうか。
  
 2.上記「VBAで実現したいこと」を行うためには、
  下記のプログラムにどのような追加を行えば良いでしょうか。

【作成したプログラム】
Private Sub worksheet_change(ByVal target As Range)
Dim i As Range
For Each i In target
If i.MergeArea.Value = "" Then
i.MergeArea.Borders(xlDiagonalUp).LineStyle = xlContinuous
Else
i.MergeArea.Borders(xlDiagonalUp).LineStyle = xlNone
End If
Next i
End Sub

以上、よろしくお願いします。

Excel VBAは初心者です。
仕事で必要なため、アドバイスをいただけると非常に助かります。
よろしくお願いします。

【VBAで実現したいこと】
 下記のようなセルで構成されている簡単な
 申請書を作成しております。
 
 結合セル1:ABCD列と4行目で結合されたセルで、氏名を入力します。
 結合セル2:EFGH列と4行目で結合されたセルで、氏名を入力します。
 結合セルA:ABCD列から5678行で結合されたセルです。
 結合セルB:EFGH列から5678行で結合されたセルです。
 ※結合セル1、2~10まで存...続きを読む

Aベストアンサー

> 色々試してみましたが、やはりmerlionXXさんの添付画像のような結果になりませんでした。

ではどういう結果になったのですか?
もしまったく作動しないのなら、マクロはどこに書きましたか?
ひょっとしてシートモジュールではなく標準モジュールに書いてませんか?

Qexcel 空白セルに自動で斜線をひきたいです

EXCEL2007使用しています。

名簿シートと印刷シートがあります。
印刷シートのセルAJ33:AR37の結合セルに=IF(VLOOKUP($J$4,名簿!$A$2:$G$383,7)="","","印")
がはいっています。

このセルが空白ならば斜線を引きたいのですが、なかなかうまくできません。
過去の質問等も参考にしましたが、斜線は引けても、今度は消えません・・・。

ちなみに連続印刷をすでに作ってあるのですが、この連続印刷にも対応させることは可能でしょうか?

A1:C3の結合セルの名前は”番号” 
印刷範囲の入力セルは”自”、”至”としてあります。

Sub 印刷開始()
Range("番号") = Range("自")
Do While Range("番号") <= Range("至")
Sheets("印刷").PrintOut
Range("番号") = Range("番号") + 1
Loop
End Sub


説明力がなくて申し訳ないのですが、どうぞよろしくお願い致します。

Aベストアンサー

すでにNo1さんが回答されてはいますが、
J14セルの数式で、名簿に番号が無かった場合のエラー対策を一応入れています。

あと、(おそらく)印刷範囲外の行数分(10行)だけ、ご質問内容と画像の状態がずれています。
どちらに合わせて作成するか判断しかねますので、統一性を持たせてください。

>印刷シートのセルAJ33:AR37の結合セルに
画像ではAJ43:AR47と見受けられます。

>=IF(VLOOKUP($J$4,名簿!$A$2:$G$383,7)="","","印")
個の数式で参照している「$J$4」は画像では「$J$14」ですよね?

下記コードは画像の状態として作成しています。
「AJ33」に「"印"」や「""」が表示されるのであれば
『Set myRng = Range("AJ43")』を変更してください。

■注意
印刷開始マクロに斜線の切換コードを追加したコードが「VBAコード(1)」になります。
既存の印刷開始マクロと差し換えて利用してください。

ただし、

名前「番号」の範囲A1:C3の手入力時にも斜線を切り替えたい場合は
印刷するシート名を右クリック→コードの表示
最下の「VBAコード(2)」を貼り付けたうえで、
現在の印刷開始マクロはそのまま『変更せずに』利用してください。


■VBAコード(1)

Sub 印刷開始()
Dim myRng As Range
Set myRng = Range("AJ43")
Range("番号") = Range("自")
Do While Range("番号") <= Range("至")
  If IsError(myRng.Value) Then Exit Sub
  With myRng.Borders(xlDiagonalDown)
    If myRng.Value = "" Then
      .LineStyle = xlContinuous
    Else
      .LineStyle = xlNone
    End If
  End With
  Sheets("印刷").PrintOut
  Range("番号") = Range("番号") + 1
Loop
End Sub


■VBAコード(2)

Private Sub Worksheet_Change(ByVal Target As Range)
Dim myRng As Range
Set myRng = Range("AJ43")
  If IsError(myRng.Value) Then Exit Sub
  With myRng.Borders(xlDiagonalDown)
    If myRng.Value = "" Then
      .LineStyle = xlContinuous
    Else
      .LineStyle = xlNone
    End If
  End With
End Sub

すでにNo1さんが回答されてはいますが、
J14セルの数式で、名簿に番号が無かった場合のエラー対策を一応入れています。

あと、(おそらく)印刷範囲外の行数分(10行)だけ、ご質問内容と画像の状態がずれています。
どちらに合わせて作成するか判断しかねますので、統一性を持たせてください。

>印刷シートのセルAJ33:AR37の結合セルに
画像ではAJ43:AR47と見受けられます。

>=IF(VLOOKUP($J$4,名簿!$A$2:$G$383,7)="","","印")
個の数式で参照している「$J$4」は画像では「$J$14」ですよね?

下記コー...続きを読む

QExcel データ入力に応じて自動的に斜線を引きたいのですが

 ご覧いただきありがとうございます。エクセルで、データが入力されていないときはセルに斜線が引かれていて、データが入力されたら自動的にその斜線が消えるようにできるでしょうか。お分かりになられる方がいらっしゃいましたら、ご教示ください。

 セル範囲はA1:C7で、A1とB1には常にデータが入っています。残りのセルに、以下のような感じで斜線を引きたいのです。(黒丸はデータが入っているセルを、白丸は空白セルを表しています)

(最初の状態)
  A B C
1 ● ● ○ → C1セルの左上隅から右下隅にかけて斜線
2 ○ ○ ○ → A2セルの左上隅からC7セルの右下隅にかけて
3 ○ ○ ○   1本の斜線
4 ○ ○ ○
5 ○ ○ ○
6 ○ ○ ○
7 ○ ○ ○

(データを追加した状態:ア)
  A B C
1 ● ● ● → C1セルの斜線は消える
2 ● ● ○ → C2セルの左上隅から右下隅にかけて斜線
3 ○ ○ ○ → A3セルの左上隅からC7セルの右下隅にかけて
4 ○ ○ ○   1本の斜線
5 ○ ○ ○
6 ○ ○ ○
7 ○ ○ ○

(データを追加した状態:イ)
  A B C
1 ● ● ● → C1セルの斜線は消える
2 ● ● ●
3 ○ ○ ○ → A3セルの左上隅からC7セルの右下隅にかけて
4 ○ ○ ○   1本の斜線
5 ○ ○ ○
6 ○ ○ ○
7 ○ ○ ○

 以下、データ入力が進むにつれて、斜線が自動的に引き直されてほしいです。また、いったん入力したデータを削除したら、斜線は復活してほしいです。データをとびとびに入力したり削除したりすることはありません。

 わかりにくい説明で恐縮ですが、よろしくお願いいたします。

 ご覧いただきありがとうございます。エクセルで、データが入力されていないときはセルに斜線が引かれていて、データが入力されたら自動的にその斜線が消えるようにできるでしょうか。お分かりになられる方がいらっしゃいましたら、ご教示ください。

 セル範囲はA1:C7で、A1とB1には常にデータが入っています。残りのセルに、以下のような感じで斜線を引きたいのです。(黒丸はデータが入っているセルを、白丸は空白セルを表しています)

(最初の状態)
  A B C
1 ● ● ○ → C1...続きを読む

Aベストアンサー

ちょっと変えてみました。もっとすっきり書けると思うのですが・・・。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim LastRow As Integer
Dim n As Integer
Dim TopR As Integer
Dim LeftC As Integer
Dim numR As Integer
Dim numC As Integer

TopR = 3 '先頭の行
LeftC = 3 '先頭の列
numR = 7 '行数
numC = 3 '列数

If Target.Row >= TopR And Target.Column >= LeftC _
And Target.Row <= TopR + numR - 1 And Target.Column <= LeftC + numC - 1 Then
LastRow = Cells(TopR + numR, LeftC).End(xlUp).Row '最終行
n = numC - Application.WorksheetFunction.CountBlank _
(Range(Cells(LastRow, LeftC), Cells(LastRow, LeftC + numC - 1))) '最終行の入力セル数

With ActiveSheet.Shapes("LongLine") '長い斜線の設定
.Left = Cells(TopR, LeftC).Left
.Top = Cells(LastRow + 1, 1).Top
.Height = Cells(TopR + numR, 1).Top - .Top
If LastRow = TopR + numR - 1 Then
.Width = 0
Else
.Width = Cells(1, numC + 1).Left
End If
End With

With ActiveSheet.Shapes("ShortLine") '短い斜線の設定
If n = 3 Then
.Height = 0
Else
.Height = Cells(LastRow, 1).Height
End If
.Top = Cells(LastRow, 1).Top
.Left = Cells(1, LeftC + n).Left
.Width = Cells(1, LeftC + numC).Left - .Left
End With

End If

End Sub

.Top :セルや図形の左上のy座標
.Left :セルや図形の左上のx座標
.Height :セルや図形の高さ
.Width :セルや図形の幅

これらをセル位置に応じて設定しています。
Cells(行番号, 列番号)

以下を適宜変更してください。
TopR = 3 '先頭の行
LeftC = 3 '先頭の列
numR = 7 '行数
numC = 3 '列数

ちょっと変えてみました。もっとすっきり書けると思うのですが・・・。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim LastRow As Integer
Dim n As Integer
Dim TopR As Integer
Dim LeftC As Integer
Dim numR As Integer
Dim numC As Integer

TopR = 3 '先頭の行
LeftC = 3 '先頭の列
numR = 7 '行数
numC = 3 '列数

If Target.Row >= TopR And Target.Column >= LeftC _
And Target.Row <= TopR + numR - 1 And Target.Column <= LeftC + numC - 1 Then
L...続きを読む

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

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

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

Qある範囲のセルから任意の値を検索して、その隣のセルの値を取得するという関数はありますか?

Excelの関数について質問します。
ある範囲のせるを検索して、その隣のセルの値を取得するという関数を探しています。
なければユーザー定義で作りたいと思っています。
VLOOKUP関数では一番左端が検索されますが、
それをある範囲まで拡張して、
その右隣の値を取得できるようにしたいのです。
どうかお知恵をお貸しください。

Aベストアンサー

●X1セルの値を範囲A1:F200の中から探して、その右隣のセルの値を返す

 =OFFSET(A1,SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1))-1,SUMPRODUCT(COLUMN(A1:F200)*(A1:F200=X1)))

※最初のA1はワークシートの左上隅を示すものなので、検索範囲に関わらずA1固定
※SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1)) ⇒ A1:F200で値がX1と一致するセルの行番号

>その「ある範囲」の中には検索したい値が入っているセルは1つしかありません。
というのが前提です。複数のセルがHITすると関係ないセルの値が返るので、
場合によっては、IFをかぶせてCOUNTIFで確認した方が良いかもしれません。
 ex. =IF(COUNTIF(A1:F200,X1)=1,【上記数式】,"えらー")

ちなみに、VBAでやるならこんな感じになるかと。

動作の概要
 【検査範囲】から【検査値】を探し、
 最初にHITしたセルについて、右隣のセルの値を返す。
 ex. =Sample(X1,A1:F200)

'--------------------------↓ココカラ↓--------------------------
Function Sample(ByVal 検査値 As Variant,ByVal 検査範囲 As Range)
 For Each セル In 検査範囲
  If セル = 検査値 Then Exit For
 Next セル
 Sample = セル.Offset(0, 1)
End Function
'--------------------------↑ココマデ↑--------------------------

いずれもExcel2003で動作確認済。
以上ご参考まで。

●X1セルの値を範囲A1:F200の中から探して、その右隣のセルの値を返す

 =OFFSET(A1,SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1))-1,SUMPRODUCT(COLUMN(A1:F200)*(A1:F200=X1)))

※最初のA1はワークシートの左上隅を示すものなので、検索範囲に関わらずA1固定
※SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1)) ⇒ A1:F200で値がX1と一致するセルの行番号

>その「ある範囲」の中には検索したい値が入っているセルは1つしかありません。
というのが前提です。複数のセルがHITすると関係ないセルの値が返るので、
場...続きを読む

Q条件付き書式で自動で斜線の罫線を引く

例えば、A1に『×』と入力された場合、B1のセルに斜線の罫線を自動的にひくような条件付き書式の設定をしたいのですがうまくいきません。マクロは難しいので条件付き書式で対応したいと考えておりますが、どなたか方法をご教示いただけませんでしょうか。
ちなみにExcel2007を使用しています。
以上、よろしくお願いいたします。

Aベストアンサー

あくまでもサンプルですのでかなり手抜き版ですが、こんな感じでワークシートモジュールに作る事になるかと……。

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim rOne As Range
 For Each rOne In Target
  If (rOne.Address = "$A$1") * (rOne = "×") Then
   Range("B1").Select
    With Selection.Borders(xlDiagonalUp)
     .LineStyle = xlContinuous
    End With
  End If
 Next
End Sub

QエクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?

Qエクセルで条件付きで罫線の斜線を引きたいです。

エクセル2007についての質問です。
ある条件のときに罫線の右下がり斜線を引きたいのですが、条件付書式ではできません。
マクロでしなくてはいけないことはわかったのですが、それ以上は進めなくて困っています。

セル(U2)に数字を打ち込んだらセル(I10:J11),(I12:J13),(I14:J15),(L10:Q11),(L12:Q13),(L14:Q15)(結合したもの)にIF関数とINDEX関数を組み合わせて他のシートからセル(U2)に対応するデーターを呼び出しています。
セル(I10:J11)に呼び出した数値が10未満ならセル(L10:Q11)に罫線で右下がりの斜線を入れ、10以上なら右下がりの斜線を消すということが行いたいです。(他の2つの組み合わせでも同様)

当方マクロを組んだことが全くなく本を読んで独学しているのですが、至急必要ということになり当方の技術ではなんともなりません。助けてください。

ちなみにセル(I10:J11)に書いてある関数は=VLOOKUP($U$2,別シート!$A:$I,3,0)
セル(L10:Q11)に書いてある関数は=IF(INDEX(別シート!$A$3:$K$400,$U$2,4)=0,"",INDEX(別シート!$A$3:$K$400,$U$2,4))
といったものです。

エクセル2007についての質問です。
ある条件のときに罫線の右下がり斜線を引きたいのですが、条件付書式ではできません。
マクロでしなくてはいけないことはわかったのですが、それ以上は進めなくて困っています。

セル(U2)に数字を打ち込んだらセル(I10:J11),(I12:J13),(I14:J15),(L10:Q11),(L12:Q13),(L14:Q15)(結合したもの)にIF関数とINDEX関数を組み合わせて他のシートからセル(U2)に対応するデーターを呼び出しています。
セル(I10:J11)に呼び出した数値が10未満ならセル(L10:Q11)に罫線で右下が...続きを読む

Aベストアンサー

I10の内容でL10:Q11に右下がりの罫線を引いたり、消したりなら
下記の内容を、設定するシートのコード欄にコピー&ペーストして確認してください。
マクロの起動は、シート内でセルの移動で実行されます。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("I10").Value < 10 Then
Range("L10:Q11").Borders(xlDiagonalDown).LineStyle = xlContinuous
Else
Range("L10:Q11").Borders(xlDiagonalDown).LineStyle = xlNone
End If
End Sub

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?


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

人気Q&Aランキング