fc2ブログ

【VBA】アクティブなセルの行を選択する、選択された行を非表示にする

2010-10-04 23:40:50 Mon

VBAマクロです。
表題の通り、「アクティブなセルの行を選択する」方法と「選択された行を非表示にする」方法です。

    rowno = ActiveCell.Row '現在選択されている行の行インデックスを取得
    Rows(rowno & ":" & rowno).Select '行全体を選択状態とする
    Selection.EntireRow.Hidden = True '選択されている行を非表示にする


セルを非表示にするオペレーションをよくやるのであれば、Application.OnKey を使用するかマクロのショートカットキー登録すれば便利かと思います。

【EXCEL】同じ内容を他のセルにも一度に反映させるやり方

2010-09-04 21:59:38 Sat

1つのセルに入力した内容を他のセルにもコピーしたい場合、色々とやり方はあります。

1.入力したセルをコピーし、コピー先セルに貼り付け

2.CTRL で複数セルを選択した上で F2 で編集し、決定時に CTRL + Enter

2の方法を知らなかったのでメモしておきます。

【VBA】テキストファイル出力

2010-07-13 23:18:51 Tue

このページの左の方にある「名言集」という javascript はプラグインとして
誰かのつくっていたものの借り物です。

このプラグインに従って、名言とその発言者をエクセルに記述することで javascript ファイルを出力する簡単なマクロを作成しました。

'/**
' * FC2ブログ用プラグインJavaScript出力マクロ
' */
Sub outputJavaScript()

    Dim path As String
    
    path = fileOpen()
    
    If path = "False" Then
        GoTo EndLabel
    Else
        'MsgBox path
    End If
    
   main path
   
EndLabel:
End Sub

'/**
' * ファイルオープンダイアログ
' * ファイルパスを返却します
' */
Private Function fileOpen() As String
    
    Dim vntFileName As Variant
    
    'ファイルを保存するダイアログを開きます
    vntFileName = Application.GetSaveAsFilename( _
          InitialFileName:="meigen.js" _
        , FileFilter:="javascriptファイル(*.js),*.js" _
        , FilterIndex:=1 _
        , Title:="保存先の指定" _
        )
        
    fileOpen = vntFileName
    
End Function

'/**
' * valueが空でも出力する
' */
Sub writeText(ByVal value As String, ByVal n As Long)
        
    If value = "" Then
        Print #n, value
    Else
        Print #n, value
    End If
        
End Sub

'/**
' * メイン処理
' */
Sub main(ByVal path As String)

    Dim ws As Worksheet
    Dim currentWs As Worksheet
    Dim counter As Long
    counter = 0
    Set currentWs = ActiveSheet
    
    ' 入力最大行数取得
    MaxRow = currentWs.Cells(Rows.Count, 1).End(xlUp).Row
        
    Dim n As Long
    n = FreeFile
    Open path For Output As #n
        
        writeText "<SCRIPT TYPE=""text/javascript"">", n
        writeText "<!-- ", n
        writeText "", n
        writeText "// このプラグインの本家です。<a href=""http://plaza.rakuten.co.jp/bluesidusfield/"" target=""_blank"">星が見える名言集</a>", n
        writeText "", n
        writeText "var msg = new Array();", n
        writeText "", n
        writeText "", n
        writeText "// 設定開始(メッセージの内容を設定してください)", n
        writeText "", n
        
        For i = 2 To MaxRow

'        ' 入力最大列数定義
'        MaxCol = 2
'
'        j = 1
'        Do While j < MaxCol + 1
'
        meigenString = currentWs.Cells(i, 1)
        hatugensyaString = currentWs.Cells(i, 2)
'
'
'        ' 名言
'        If j = 1 Then
            writeText "msg[" & counter & "]= '『" & meigenString & "』…" & hatugensyaString & "';", n
        ' 名言の発言者
            counter = counter + 1
        Next i
    
        writeText "", n
        writeText "", n
        writeText "// 設定終了", n
        writeText "", n
        writeText "", n
        writeText "var no = Math.floor(Math.random() * msg.length);", n
        writeText "", n
        writeText "// 表示開始", n
        writeText "document.write(msg[no]);", n
        writeText "// 表示終了", n
        writeText "", n
        writeText "// -->", n
        writeText "</SCRIPT>", n
        
    Close #n

End Sub


上記ソースは、

・ファイルオープンダイアログで保存場所を選択する
・テキストファイルへ出力する

といったものの参考にできるかもしれません。

なお、上記のコメントを外してちゃんとコードを記述すると、行、列でネストして繰り返しをします。

1行目-1列目
1行目-2列目
1行目-3列目



2行目-1列目
2行目-2列目
2行目-3列目




といった感じになります。

なお、エクセルのほうは下記のようなイメージ。

WS000013_20100713232246.jpg

マクロは、ボタンのクリックイベントで処理を起動しています。

Private Sub CommandButton1_Click()
    Call ThisWorkbook.outputJavaScript
End Sub


これでちょっとは便利になったかな。


参考URL
http://www.happy2-island.com/excelsmile/smile03/capter00804.shtml

【VBA】繰り返しのcontinueと正規表現

2010-04-20 03:21:12 Tue

■VBAで繰り返し途中にCONTINUEする方法

ないみたい。
なので、GOTO で NEXT の前までとぶ必要があるみたい。

http://d.hatena.ne.jp/love_peace/20090611/1244729060

■VBAの文字列判定で正規表現を使う方法

ある。
http://codezine.jp/article/detail/1655

WS000129.jpg

WS000130.jpg




こいつを・・・。

WS000128.jpg

これで・・・。

Sub irotuke()

    Dim i As Long, buf As String
    
    Dim re As RegExp     '宣言
    Set re = New RegExp
        re.Pattern = "^├.*$"
    
    Dim re1 As RegExp     '宣言
    Set re1 = New RegExp
        re1.Pattern = "^└.*$"
    
    Dim re2 As RegExp     '宣言
    Set re2 = New RegExp
        re2.Pattern = "^(\w|\W).*$"
    
    For i = 1 To 65536
    
        buf = Cells(i, 1).Value         ''セルの値を変数bufに格納する
        
        If re.Test(buf) Then
            Range(Cells(i, 1), Cells(i, 256)).Interior.ColorIndex = 3
            GoTo TestContenueLabel
        End If
        
        If re1.Test(buf) Then
            Range(Cells(i, 1), Cells(i, 256)).Interior.ColorIndex = 5
            GoTo TestContenueLabel
        End If
        
        If re2.Test(buf) Then
            Range(Cells(i, 1), Cells(i, 256)).Interior.ColorIndex = 4
            GoTo TestContenueLabel
        End If
        
TestContenueLabel:
    Next i

End Sub


if文でelse使っていないのはとりあえずご愛嬌で。

WS000127.jpg

ガチャピンみたいないろになりました。

【Excel】名前定義と入力規則「リスト」

2010-04-04 23:42:15 Sun

データの入力規則で、他ワークシートへの参照は出来無い。

WS000120.jpg

で、これを回避するために 名前定義 を使う。

定義したい範囲を選択して左上のところに 名前定義 する。

WS000121.jpg

これを今度は入力規則で利用する。
以下のような感じ。

WS000122.jpg

=定義された名前 にするとOK.

これで擬似的に他シートへの入力規則データ参照が可能となる。

さらにこのシートを見せたくないのであれば、シートのプロパティ visible の値を変更しておく。
VisualBasicEditor は Alt + F11 で表示。
シートのプロパティ(画像左下のほう)visible の値を -1:表示 から 0:非表示 に変更しておく。

WS000123.jpg

これで入力規則の文字は隠蔽された。
でもシートのプロパティを変更すると見えるようにもなるし編集できるようにもなる。

編集させたくない場合は保護するなりなんなり他の方法で。

名言集
全記事(数)表示
全タイトルを表示
ブログ内検索
Loading