VBA 罫線再び

本日はコチラの補講。罫線の引き方について

 

ググりながら攻略。

Range("B2:F2").Borders(xlEdgeBottom).LineStyle = xlDouble

セル範囲を指定.borders(どこの部位か).LineStle = 罫線の種類

みたいな感じ

 

Range("B2:F13").Borders.LineStyle = xlContinuous

格子状にひく場合はこう

 

ぼちぼちやっていきます。

VBA、フォント設定

VBAを勉強してます。

ExcelとVBAの入門解説|エクセルの神髄

で練習問題を解いてましたが難しくて保留することにしました。

InStrでつまづいてます。

 

上の教材のメインは終わったのですが補講は受けてなかったのでそちらを始めることにしました。

今回はフォントの設定変更。

解説を聞きながら理解し、確認問題はググりながらクリアしました。

途中、最終行の取得がうまくいきませんでしたが、

Cells(Rows.Count, 1).End(xlUp).Row

これの最後の.Rowが抜けてました。

最終行だけ反応しなくて少し悩みました。。。

 

精進します!

VBA, InStr関数

こんにちは。

駆け出しのエンジニアです。

現在学習してるのはコチラ

excel-ubara.com

都道府県と、県庁所在地を新たなセルに転記する課題。

都道府県と県庁所在地が異なる場合は

北海道(札幌)と書く

 

難しすぎました。

Replace関数を使用するのかと思って色々しましたがうまくいかず。。。

解答を見るとInStr関数を使うみたい

始めて聞いた。。。

 

InStr関数に関してはコチラ

excel-ubara.com

文字の位置を返すみたい、なかったら0を返すとのこと。

 

それがわかっても理解できない。

 

ヤフーでコメント書いていてくれる人がいて

正解のコードとコメントをコメントアウトしたものを張り付けときます。

ふうう、先が思いやられる。。。

Option Explicit

Sub 都道府県名()

    Dim i As Long
    Dim strPref As String
    Dim strCity As String
    For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
        
        'セルの「i」行目1列目(=列「A」)に「)」が含まれて(存在して)いれば、という意味になります。
        '「InStr()」関数は、含まれていれば、何文字目にあったかを数値で返します
        If InStr(Cells(i, 1), "(") > 0 Then
            
        'InStr("京都府(きょうと)", InStr("京都府(きょうと)", "(") - 1)
        'ですから、後ろの「InStr()」は、「京都府(きょうと)」の中に「(」が何文字目か調べています。
        '「京都府(きょうと)」の中で「(」は、4文字目です。
        'しかし今欲しいのは、「京都府」ですから、「- 1」しているのです。
        'Left("京都府(きょうと)", 4)
        'とすると、「京都府(」が「StrPref」に入ってしまいます。
        '「- 1」することで、「(」を含まない、左から何文字目が得られるのです。
            strPref = Left(Cells(i, 1), InStr(Cells(i, 1), "(") - 1)
        Else
            strPref = Cells(i, 1)
        End If
        If InStr(Cells(i, 2), "(") > 0 Then
            strCity = Left(Cells(i, 2), InStr(Cells(i, 2), "(") - 1)
        Else
            strCity = Cells(i, 2)
        End If
        
        'Left("沖縄県", Len("沖縄県") - 1)から考えましょう。
        '「沖縄県」の文字列長さ(Len()」は、「3」文字です。
        'Left("沖縄県", 3)」とすると、そのままで「沖縄県」ですね。
        '今は、都道府県名と県庁所在地が、同じ場合を知りたいので、「- 1」、すなわち、北海道の「道」、「東京都」の「都」、「京都府大阪府」の「府」、各県の「県」を削除して、2列目の「県庁所在地」と比較しているわけです。
        '「沖縄県」→「沖縄」を作って、「県庁所在地」を見ると「那覇」なので、違います。
        'しかし、「東京都」→「東京」を作って、「県庁所在地」を見ると、「東京」と一致します。
        'この、一致するかどうかの判断のため、「沖縄県」の「県」を削除しているのです。


        If Left(strPref, Len(strPref) - 1) = strCity Then
            Cells(i, 3) = strPref
        Else
            Cells(i, 3) = strPref & "(" & strCity & ")"
        End If
    Next
    
End Sub

VBA 曜日取得

マクロの勉強は続きます。

復習を経て練習問題11、12に取り組みます。

11はコピペの問題。

コチラはググりながら難なくクリア

 

難しいのは12の日付関数でした。

excel-ubara.com

 

年月日から曜日を取得するのは分かるのですが、やり方がわからない。

結局答えを見ましたが、いまいち理解できず。。。

ココは勉強しつつ、先に進めていこうと思います。

VBA 復習

コチラのサイトの練習問題を行ってます。

excel-ubara.com

 

昨日までで10回分終わったので今日は復習を行いました。

時間の関係上7回までやりました。

 

途中、Msgboxの表示方法がわからず調べました。

設定した変数を使いたい時は&で囲うのを失念。

同じく文字を入れたい時は””で囲うのも失念。

この辺は調べればすぐ出てくるので良しとしました。

 

成長を感じられたのは

lngCnt=lngCnt + 1

を理解でき始めたこと!

言語化して説明はできないけどマトリックスの映画みたいにコードが映像になる感覚を味わいました!

 

残り3問もやりたいけど体質上疲れやすいので今日はここまで。

はじめてVBAで手ごたえを感じました。

理解は遅いけどベイビーステップで進みます!!!

VBA 罫線

今回練習したのはコチラ

excel-ubara.com

客単価を計算して罫線を指定通りに引けとの問題。

計算は問題なくできた。

罫線の引き方は全く分からず調べながらやりましたが、わからないところが出たので解答を見る。

 

範囲指定は最終行を使ってました。

そうしないとデータが追加されたときに対応できないもんね。

 

外枠を囲うのはすぐできたけど、セルの上側だけにひく等はできませんでした。

 

Range(Cells(1, 1), Cells(lastRow, 4)).Borders.Weight = xlHairline

極細の線を引く
  

Range(Cells(1, 1), Cells(lastRow, 4)).BorderAround Weight:=xlMedium

外枠に中太線を引く
  

Range(Cells(2, 1), Cells(2, 4)).Borders(xlEdgeTop).Weight = xlThin

細線を引く
  

Range(Cells(1, 2), Cells(lastRow, 2)).Borders(xlEdgeLeft).Weight = xlThin

細線を引く

 

つくづく思うのはコードも覚えなきゃだけど、活用方法も知らないといけないなぁと思います。最終行を利用したりとかを柔軟に考えたいと思います。

VBA 不等号の意味

今回の練習問題はコチラ

excel-ubara.com

問題としては昨年売上と今期売上を使って昨年比を計算。

昨年比の数値によりフォントや背景色を変えてください、というもの。

 

計算は自信あり。

For~Nextで囲って計算式を入れる。

フォントや背景色も調べながらなんとか入れる。

 

が、うまくいかない。

計算はいいのだが色付けがうまくいかないのだ。

色はつくが条件と違う。

 

仕方なしに解答をみる。

ココでさらなる問題発生

私はElse if で書いてたのだが解答はselect caseで書かれている。

調べるとどちらでも良いとのことで最初の問題に立ち返る。

 

結局、不等号の向きを間違えてただけでした。

コードではなく国語と算数の問題でした。。。

 

仕事でも不等号はよく間違えるので一回、小学生の参考書でも買おうと思います。