[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『表の表記』(中学生)
お世話になります。
表の比を求めて、値によってセルの数値の位置、太字、斜体そしてフォントの大きさを
変える。という事をしたいのです。
表はA5からAG30の範囲で、A列÷B列 B列÷C列・・・AF列÷AG列といった具合で
各セルの値(割る方のセル)を位置などずらしておおよその比を判断するというものです。
只、値のないところは N/A の表記になってます。
処理としては 比が 2以上でフォントサイズを12に設定。
2未満、1.75以上で、セル左詰、太字、斜体。
1.75未満、1.5以上で、セル左詰、太字。
1.5未満、1.25以上で、セル左詰。
1.25未満は何もしません。
プログラムを書きたいのですが、知識不足と自分のPCがないので思う様に
出来ません。 また、プログラムオタクの友人が異国に行ってしまったので
聞ける人がいません。 ちなみに私はハードオタクです。
諸先輩方の知恵をお貸し頂けると大変助かります。
それと、異国の友人が言っていた事で気になった事が、for nextは
各列ごとに処理していないから気をつけろ!と言われました。
(おそらく、for nextで処理すると思ったもので・・・)
合わせて教えて頂けると嬉しいです。
宜しくお願いします。
< 使用 Excel:Excel2007、使用 OS:Windows7 >
私もγさん同様、条件付書式で対応するのがいいのではと思います。 値が変われば瞬時に状態も変わりますので。
ただ、残念なことに、条件付書式ではフォントサイズの設定やセル内の横位置の設定ができないですねぇ。
なので、マクロ処理ということで。
書いただけで、コンパイルレベルのチェックしかしていませんが。 (これをChangeイベントあたりで処理すれば、値が変わった時に瞬時に書式もかわりますけど、とりあえず)
Sub Sample() Dim r As Range Dim c As Range Dim myBold As Boolean Dim myItalic As Boolean Dim myHA As Long Dim mySize As Double Dim ck As Double
Application.ScreenUpdating = False
With Range("A5:G30") 'いったんすべてのセルの状態を通常ベースにする .Font.Size = Application.StandardFontSize .Font.Italic = False .Font.Bold = False .HorizontalAlignment = xlCenter
For Each r In .Cells.Rows For Each c In r.Cells If Not IsEmpty(c.Offset(, 1)) Then ck = c.Value / c.Offset(, 1).Value If ck >= 1.25 Then mySize = Application.StandardFontSize myItalic = False myBold = False myHA = xlCenter Select Case ck Case Is < 1.5 myHA = xlLeft Case Is < 1.75 myHA = xlLeft myBold = True Case Is < 2 myHA = xlLeft myBold = True myItalic = True Case Else mySize = 12 End Select With c .Font.Size = mySize .Font.Italic = myItalic .Font.Bold = myBold .HorizontalAlignment = myHA End With End If End If Next Next End With
End Sub
(β) 2015/07/04(土) 07:48
ck = c.Value / c.Offset(, 1).Value − 型が一致しませんと出ます。 どうしたら良いのですか? 教えてください。
(中学生) 2015/07/04(土) 13:09
領域内のセルはすべて数字か空白だと思っているんですが、文字列なんかもあるということですか? あるいは、式なんかが入っていて、空白になっているところがあるとか?
もし、そういったことがあるなら
If Not IsEmpty(c.Offset(, 1)) Then ck = c.Value / c.Offset(, 1).Value
これを
If Val(c.Offset(, 1).Value) <> 0 Then ck = Val(c.Value)/ Val(c.Offset(, 1).Value)
こうして試してみてください。
(β) 2015/07/04(土) 14:04
空白でなく、エラーになっている(#N/A)ということだと思われます
(マナ) 2015/07/04(土) 14:23
To マナさん
あぁ、そうですね。ご指摘深謝。
To 中学生 さん
エラー値セルの対応、加えて、心配なので、数値変換してチェックしたものを以下に。 (ついでに、アップ済みの初期値設定の値で誤りがありましたので、それも直してあります)
Sub Sample2() Dim r As Range Dim c As Range Dim myBold As Boolean Dim myItalic As Boolean Dim myHA As Long Dim mySize As Double Dim ck As Double
Application.ScreenUpdating = False
With Range("A5:G30") 'いったんすべてのセルの状態を通常ベースにする .Font.Size = Application.StandardFontSize .Font.Italic = False .Font.Bold = False .HorizontalAlignment = xlGeneral
For Each r In .Cells.Rows For Each c In r.Cells If Not IsError(c) And Not IsError(c.Offset(, 1)) Then If Val(c.Offset(, 1).Value) <> 0 Then ck = Val(c.Value) / Val(c.Offset(, 1).Value) If ck >= 1.25 Then mySize = Application.StandardFontSize myItalic = False myBold = False myHA = xlGeneral Select Case ck Case Is < 1.5 myHA = xlLeft Case Is < 1.75 myHA = xlLeft myBold = True Case Is < 2 myHA = xlLeft myBold = True myItalic = True Case Else mySize = 12 End Select With c .Font.Size = mySize .Font.Italic = myItalic .Font.Bold = myBold .HorizontalAlignment = myHA End With End If End If End If Next Next End With
End Sub
(β) 2015/07/04(土) 14:33
β様 早速動かせてみましたけど処理が逆でした。
ck = Val(c.Value) / Val(c.Offset(, 1).Value)を下記の
ck = Val(c.Offset(, 1).Value) / Val(c.Value)に変更してみました。
すると エラーで 0で除算しました。が表示されます。
この時のVal(c.Value)は N/A の表記でセルに入ってます。
どうしたら良いのでしょうか?
(中学生) 2015/07/04(土) 15:05
If Val(c.Offset(, 1).Value) <> 0 Then これを
If Val(c.Offset.Value) <> 0 Then に。
(β) 2015/07/04(土) 15:41
A列(割られる数)÷ B列(割る数)=ck
割る数を処理したいのですがどの様にすれば良いのでしょうか?
(中学生) 2015/07/04(土) 16:08
コードをよ〜く、おいかけるとわかると思うのですがね?
コードでは まず 対象の領域からセルを抜出し、c という変数に格納しています。 で、c.Offset(,1) は c の右隣りのセル。c.Offset(,-1) は c の左隣のセルです。 どちらを、どちらで割るのか、それは、要件次第。 A/B ではなく B/A だったので、そちらで、ck = Val(c.Offset(, 1).Value) / Val(c.Value) にしたわけですよね。 ちゃんと、そこのところは、コードから理解されたんですよね。
で、問題は、どこのセルに対して、書式をセットするかということですね。 コードでは、
With c .Font.Size = mySize .Font.Italic = myItalic .Font.Bold = myBold .HorizontalAlignment = myHA End With
c つまり、A のセルに対して行っていますね。 ここを、そうではなく、割るほうのセル B のセルにしたいということなら、この With c の c を 何かに変えればいいと思いませんか。で、何に変えるべきかはおわかりですよね。
(β) 2015/07/04(土) 17:59
(中学生) 2015/07/04(土) 20:27
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.