3

I am trying to create a label in arcgis with about 30 columns with this basic VBscript:

[field1] & vbnewline & [field2] & vbnewline &[field3] & vbnewline... ETC

How can I make it so that fields with no data (not even a "0") do not show up? I have been experimenting with If Then labels to no avail.

3
  • The labeling expression takes only VB and JSscript languages (unlike field calculator which uses python or vb) are you sure you are using the correct language?
    – yanes
    Feb 3, 2016 at 21:52
  • @yanes Maybe it depends what version you're using, but my options (10.2.2) for label expression are: VBScript, Python, and JScript.
    – phloem
    Feb 3, 2016 at 21:56
  • Ah! I have 10.0, anyway, I was easily able to give an SQL argument using the label manager. While still keeping the above expression in the mainstream label field. (but it only worked for one field)
    – yanes
    Feb 3, 2016 at 21:58

2 Answers 2

4

I expect there's a better way to do this, but here's a start that works for me (Python parser):

def FindLabel ( [10_2008] , [11_1994] , [11_2000] , [11_2002] , [11_2003], [11_2008], [12_1987] , [12_1994] , [12_2003] , [12_2010] , [12_2011] , [12_2012] , [3_2006] , [3_2011] , [4_1993] , [5_1997] , [5_2001] , [5_2007] , [5_2008] , [6_1998] , [6_2005] , [6_2006] , [6_2009] , [7_2014] , [8_2014] , [9_2013] ): # your fields
    myString = '' # eventual label
    for arg in locals().values(): # get list of field values, from list of function argument values
        if arg: # check if the value isn't null, could check against 0, too
            myString += arg + '\n' # add value to label, with newline character
    return myString # return full label
-1
Function FindLabel ( [10_2008] , [11_1994] , [11_2000] , [11_2002] , [11_2003], [11_2008], [12_1987] , [12_1994] , [12_2003] , [12_2010] , [12_2011] , [12_2012] , [3_2006] , [3_2011] , [4_1993] , [5_1997] , [5_2001] , [5_2007] , [5_2008] , [6_1998] , [6_2005] , [6_2006] , [6_2009] , [7_2014] , [8_2014] , [9_2013])

FindLabel = ""

IF [10_2008] = " " THEN
    FindLabel = FindLabel
  Else
    FindLabel = FindLabel & [10_2008] 
End If

IF [11_1994] = " " THEN
    FindLabel = FindLabel
  Else
    FindLabel = FindLabel & vbnewline & [11_1994] 
End If

IF [11_2000] = " " THEN
    FindLabel = FindLabel
  Else
    FindLabel = FindLabel & vbnewline & [11_2000] 
End If

IF [11_2002] = " " THEN
    FindLabel = FindLabel
  Else
    FindLabel = FindLabel & vbnewline & [11_2002] 
End If

IF [11_2003] = " " THEN
    FindLabel = FindLabel
  Else
    FindLabel = FindLabel & vbnewline & [11_2003] 
End If

IF [11_2008] = " " THEN
    FindLabel = FindLabel
  Else
    FindLabel = FindLabel & vbnewline & [11_2008] 
End If

IF [12_1987]  = " " THEN
    FindLabel = FindLabel
  Else
    FindLabel = FindLabel & vbnewline & [12_1987] 
End If
IF [12_1994]  = " " THEN
    FindLabel = FindLabel
  Else
    FindLabel = FindLabel & vbnewline & [12_1994] 
End If

IF [12_2003]  = " " THEN
    FindLabel = FindLabel
  Else
    FindLabel = FindLabel & vbnewline & [12_2003] 
End If
IF [12_2010]  = " " THEN
    FindLabel = FindLabel
  Else
    FindLabel = FindLabel & vbnewline & [12_2010] 
End If

IF [12_2011]  = " " THEN
    FindLabel = FindLabel
  Else
    FindLabel = FindLabel & vbnewline & [12_2011] 
End If
IF [12_2012]  = " " THEN
    FindLabel = FindLabel
  Else
    FindLabel = FindLabel & vbnewline & [12_2012] 
End If

IF [3_2006]  = " " THEN
    FindLabel = FindLabel
  Else
    FindLabel = FindLabel & vbnewline & [3_2006] 
End If
IF [3_2011]  = " " THEN
    FindLabel = FindLabel
  Else
    FindLabel = FindLabel & vbnewline & [3_2011] 
End If

IF [4_1993]  = " " THEN
    FindLabel = FindLabel
  Else
    FindLabel = FindLabel & vbnewline & [4_1993] 
End If
IF [5_1997]  = " " THEN
    FindLabel = FindLabel
  Else
    FindLabel = FindLabel & vbnewline & [5_1997] 
End If

IF [5_2001]  = " " THEN
    FindLabel = FindLabel
  Else
    FindLabel = FindLabel & vbnewline & [5_2001] 
End If

IF [5_2007]  = " " THEN
    FindLabel = FindLabel
  Else
    FindLabel = FindLabel & vbnewline & [5_2007] 
End If

IF [5_2008]  = " " THEN
    FindLabel = FindLabel
  Else
    FindLabel = FindLabel & vbnewline & [5_2008] 
End If

IF [6_1998]  = " " THEN
    FindLabel = FindLabel
  Else
    FindLabel = FindLabel & vbnewline & [6_1998] 
End If

IF [6_2005]  = " " THEN
    FindLabel = FindLabel
  Else
    FindLabel = FindLabel & vbnewline & [6_2005] 
End If

IF [6_2006]  = " " THEN
    FindLabel = FindLabel
  Else
    FindLabel = FindLabel & vbnewline & [6_2006] 
End If

IF [6_2009]  = " " THEN
    FindLabel = FindLabel
  Else
    FindLabel = FindLabel & vbnewline & [6_2009] 
End If

IF [7_2014]  = " " THEN
    FindLabel = FindLabel
  Else
    FindLabel = FindLabel & vbnewline & [7_2014] 
End If

IF [8_2014]  = " " THEN
    FindLabel = FindLabel
  Else
    FindLabel = FindLabel & vbnewline & [8_2014] 
End If

IF [9_2013]  = " " THEN
    FindLabel = FindLabel
  Else
    FindLabel = FindLabel & vbnewline & [9_2013] 
End If

End Function
3
  • 1
    This works, but is... quite long. Also, if you decide that you want a new field or drop a field, you need to do a fair bit of bookkeeping to make it happen.
    – phloem
    Feb 4, 2016 at 17:34
  • 1
    This could be done much more efficiently by looping through a passed in array or similar. This is spaghetti code and totally unmaintainable. Feb 4, 2016 at 18:11
  • how do you do that? @johnbarca
    – K Han
    Feb 5, 2016 at 12:23

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.